Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.16;
Скачать: CL | DM;

Вниз

Как добраться до JS переменной в HTML из Delphi   Найти похожие ветки 

 
Piter ©   (2005-07-12 14:21) [0]

Есть WebBrowser, в него загружена страничка, можно узнать ее код:

wb.OleObject.Document.documentElement.outerHTML;

видно, что внутри выдаваемого HTML кода объявляется переменная-массив logins, которая заполняется внутри HTML нужными мне данными. Как получить доступ к этой переменной logins из Delphi, через wb?


 
Piter ©   (2005-07-13 14:53) [1]

Удалено модератором
Примечание: оффтоп....


 
DiamondShark ©   (2005-07-15 14:15) [2]

Сам не пробовал, но может получить интерфейс script engin"а и попробовать через него?


 
Piter ©   (2005-07-15 18:29) [3]

DiamondShark ©   (15.07.05 14:15) [2]

не понял мысль :(


 
DiamondShark ©   (2005-07-15 19:02) [4]

IHTMLDocument.Script


<HTML>
<HEAD>
<SCRIPT language="JavaScript">
var MyVar = "Hello from hell!";
function TestFunction()
{
 alert("Ku-ku!");
}
</SCRIPT>
</HEAD>
<BODY>
<H1>Hello,world!</H1>
</BODY>
</HTML>



procedure TForm1.FormCreate(Sender: TObject);
begin
 WebBrowser1.Navigate("C:/zzz.html");
end;

procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject;
 const pDisp: IDispatch; var URL: OleVariant);
begin
 FDocument := WebBrowser1.Document;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(FDocument.Script.MyVar);
 FDocument.Script.TestFunction;
end;


 
DiamondShark ©   (2005-07-15 19:09) [5]

Ну, естественно

FDocument: Variant;


 
Piter ©   (2005-07-17 00:30) [6]

DiamondShark ©   (15.07.05 19:09) [5]

О, Шарк, ты гений :)

Большой спасибо


 
Piter ©   (2005-07-17 02:52) [7]

Хотя возникли кое какие проблемы :(
Видимо, с тем, что переменная - это массив.
То есть, MyVar - это массив.

Доступ, например, к FDocument.Script.MyVar.length - без проблем, показывает количество элементов, все супер.

А вот любой доступ к FDocument.Script.MyVar[i] не имеет успеха. Например, в том же JS скрипте есть обращение к: FDocument.Script.MyVar[i].login, в тоже время из Delphi так вызвать нельзя - пишет, что метод не поддерживается :(


 
DiamondShark ©   (2005-07-17 12:39) [8]

Хех. Понты жабаскрипта, где всё -- объекты.

Пусть, есть ХТМЛ:


<SCRIPT language="JavaScript">
var JArray = Array("aaa","bbb","ccc");
</SCRIPT>

<SCRIPT language="VBScript">
Dim VBArray(3)
VBArray(0) = "aaa"
VBArray(1) = "bbb"
VBArray(2) = "ccc"
</SCRIPT>


Для VBArray всё честно, возвращается тип VT_ARRAY+VT_VARIANT
Для JArray возвращается тип VT_DISPATCH

Но жабаскриптовый массив поддерживает стандартный интерфейс OLE-коллекций. Т.е. получить элементы можно примерно так:


type
 ICrack = dispinterface
   ["{00020400-0000-0000-C000-000000000046}"]
   property _NewEnum: IUnknown dispid DISPID_NEWENUM;
 end;

procedure TForm1.Button1Click(Sender: TObject);
var
 JArray: OleVariant;
 V: OleVariant;
 e: IEnumVariant;
 Dummy: DWORD;
begin
 JArray := FDocument.Script.JArray;

 e := ICrack(IDispatch(JArray))._NewEnum as IEnumVariant;
 while e.Next(1, V, Dummy) = S_OK do begin
   ShowMessage(V);
   V := Unassigned;
 end;
end;


Если очень захочется, можно по этому принципу написать преобразовалку коллекции в массив. Но мне лень. ;)


 
Piter ©   (2005-07-17 12:45) [9]

DiamondShark ©   (17.07.05 12:39) [8]
V := Unassigned;


а это зачем?


 
DiamondShark ©   (2005-07-17 13:06) [10]


> а это зачем?

А это потому что IEnumVariant не финализирует передаваемый ему по ссылке вариант.


 
Piter ©   (2005-07-17 14:16) [11]

DiamondShark ©   (17.07.05 13:06) [10]

ясно! Еще раз спасибо!


 
Almok   (2005-07-21 13:58) [12]

Удалено модератором



Страницы: 1 вся ветка

Текущий архив: 2006.07.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
3-1147751981
D@Nger
2006-05-16 07:59
2006.07.16
Резервирование БД


3-1147684174
petvv
2006-05-15 13:09
2006.07.16
Help List index out of bounds (0)


1-1149287685
lamer_y
2006-06-03 02:34
2006.07.16
Проблема с TStrings


2-1151302138
mariya_mezenceva
2006-06-26 10:08
2006.07.16
проблема с dll


15-1150456037
aka
2006-06-16 15:07
2006.07.16
about Com