Napotkałem mały problem pisząc program z browserem. Nawiguję browser na dokument html w którym jest uruchamiana funkcja przy 'body onload' i jest też iframe, które blokuje/laguje wywołanie onload póki ramka się nie wczyta.
Funkcja wywoływana w onload ma kilka globalnych zmiennych które się periodycznie zmieniają w określony sposób i właśnie tu chciałbym odczytać jedną z nich jakąś prostą metodą, by znając czas opóźnienia wprowadzonego przez iframe, zmodyfikować te zmienne na podstawie ich aktualnej zawartości.
Wiem jak to zrobić okrężną drogą:
document->createElement("A");
element->put_id("backdoor");
window->execScript("document.getElementById('backdoor').innerText = zmiena");
i ostatecznie odczytam innerText tego elementu otrzymując wartość zmiennej.
Sposób 2:
window->execScript("window.external.cokolwiek = zmienna;")
wtedy w implementacji klasy external (IDispatch) wykryję DISPATCH_PROPERTYPUT z wartością zmiennej w VARIANT'cie.
Ale wymaga to dodatkowej, wcale nie skromnej implementacji.
Jest jakiś prostszy sposób?
EDIT: jest, http://support.microsoft.com/default.aspx?kbid=318426
IHTMLWindow2::GetIdOfNames zwróci DISPID dla zmiennej.
IHTMLWindow2::Invoke(DISPATCH_PROPERTYPUT) odczyta zmienną.