Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Corba";
Текущий архив: 2006.07.16;
Скачать: [xml.tar.bz2];

Вниз

Как добраться до 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 вся ветка

Форум: "Corba";
Текущий архив: 2006.07.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.01 c
6-1141675738
NKVDwnik
2006-03-06 23:08
2006.07.16
IIS


15-1150356104
Yeg
2006-06-15 11:21
2006.07.16
Хостинг


3-1147527403
Sam Stone
2006-05-13 17:36
2006.07.16
Список пользователей


15-1150695570
Ega23
2006-06-19 09:39
2006.07.16
С Днём рождения! 18 июня


11-1130412496
rOOse
2005-10-27 15:28
2006.07.16
Создание компонет





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский