Текущий архив: 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.47 MB
Время: 0.009 c