![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как добраться до JS переменной в HTML из Delphi
Piter © (2005-07-12 14:21:00)Есть WebBrowser, в него загружена страничка, можно узнать ее код:
wb.OleObject.Document.documentElement.outerHTML;
видно, что внутри выдаваемого HTML кода объявляется переменная-массив logins, которая заполняется внутри HTML нужными мне данными. Как получить доступ к этой переменной logins из Delphi, через wb?
Almok (2005-07-21 13:58:00) [1]Удалено модератором
Piter (2005-07-17 14:16:00) [2]DiamondShark © (17.07.05 13:06) [10]
ясно! Еще раз спасибо!
DiamondShark (2005-07-17 13:06:00) [3]
> а это зачем?
А это потому что IEnumVariant не финализирует передаваемый ему по ссылке вариант.
Piter (2005-07-17 12:45:00) [4]DiamondShark © (17.07.05 12:39) [8]
V := Unassigned;
а это зачем?
DiamondShark (2005-07-17 12:39:00) [5]Хех. Понты жабаскрипта, где всё -- объекты.
Пусть, есть ХТМЛ:
<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 02:52:00) [6]Хотя возникли кое какие проблемы :(
Видимо, с тем, что переменная - это массив.
То есть, MyVar - это массив.
Доступ, например, к FDocument.Script.MyVar.length - без проблем, показывает количество элементов, все супер.
А вот любой доступ к FDocument.Script.MyVar[i] не имеет успеха. Например, в том же JS скрипте есть обращение к: FDocument.Script.MyVar[i].login, в тоже время из Delphi так вызвать нельзя - пишет, что метод не поддерживается :(
Piter (2005-07-17 00:30:00) [7]DiamondShark © (15.07.05 19:09) [5]
О, Шарк, ты гений :)
Большой спасибо
DiamondShark (2005-07-15 19:09:00) [8]Ну, естественно
FDocument: Variant;
DiamondShark (2005-07-15 19:02:00) [9]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;
Piter (2005-07-15 18:29:00) [10]DiamondShark © (15.07.05 14:15) [2]
не понял мысль :(
DiamondShark (2005-07-15 14:15:00) [11]Сам не пробовал, но может получить интерфейс script engin'а и попробовать через него?
Piter (2005-07-13 14:53:00) [12]Удалено модератором
Примечание: оффтоп....