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ą.