Hallo,
ich habe wiedermal eine Frage zum TWebBrowser in Verbindung mit dem IE10...
Folgendes ist mir aufgefallen:
Ich kann in einem Testprogramm JavaScript auf zwei verschiedene Weisen ausführen, einmal über das WebBrowser-Object mithilfe der Funktion
execScript() und einmal über die "Adresszeile", also über die Methode
Navigate('javascript: ...').
Bis zum IE8 scheinen sich beide Arten der Ausführung gleich zu verhalten, jedenfalls bei den Scripten, die ich bisher in der Mangel hatte.
Nur beim IE10 scheint es einen Unterschied zu geben, der mir jetzt Schwierigkeiten bereitet.
Beispielcode kann ich leider wiederum nur fetzenweise geben (ext. Firmenseite):
Dies ist die Definition zweier Radiobuttons, auf die ich einen automatisierten Klick ausführen will:
Code:
<td>
<input type="radio" name="rbInsuredEvent" id="rbInsuredEvent0" value="false" onclick="datInstance.switchInsuredEventState();" />
<label for="rbInsuredEvent0">Nein</label>
</td>
<td>
<input type="radio" name="rbInsuredEvent" id="rbInsuredEvent1" value="true" onclick="datInstance.switchInsuredEventState();" />
<label for="rbInsuredEvent1">Ja</label>
</td>
Meine Prozedur zum Ausführen des JavaScript-Codes sieht folgendermaßen aus:
Delphi-Quellcode:
procedure TForm1.ExecuteJavaScriptButtonClick(Sender: TObject);
var
document: IHTMLDocument2;
document_window: IHTMLWindow2;
begin
if trim(js_function.Text) <> '
'
then begin // JS-Funktion über "Adresszeile" ausführen...
AddressEdit.Text := '
javascript:' + trim(js_function.Text);
GoButtonClick(self);
end;
if trim(js_function_2.Text) <> '
'
then begin // JS-Funktion über Browserobjekt ausführen...
document := WebBrowser1.document
as IHTMLDocument2;
document_window := document.parentWindow
as IHTMLWindow2;
Try
document_window.execScript(js_function_2.Text, '
JavaScript');
except on e:
Exception do begin
showMessage('
Fehler bei der Ausführung des JavaScript-Codes');
end;
end;
end;
end;
Ich fülle manuell immer nur
entweder das Edit-Feld js_function
oder das Edit-Feld js_function_2, so dass nur eine der beiden Wege gegangen wird.
Der Code, den ich ausführen will, ist folgender:
Code:
document.getElementById('rbInsuredEvent0').click()
Bis zum IE8 (auf XP) kein Problem - beide Wege funktionieren.
Beim IE10 auf Win7 (kein Kompatibitätsmodus, sondern erzwungener IE10-Browsermodus) taucht plötzlich ein Unterschied auf, den ich leider Gottes (
) nicht beschreiben kann - es scheint bei Ausführung über das Browserobjekt die Seite kurz neu geladen zu werden (unerwünschtes Verhalten), während bei Ausführung über die "Adresszeile" einfach nur der Radiobutton umschnappt (erwünschtes Verhalten).
Hm, ich weiß, das ist nicht viel Information, aber vllt. hat jemand eine ähnliche Erfahrung gemacht...?
Im Grunde bezieht sich meine Frage darauf, ob Ihr meint, dass es "normal" ist, dass sich bei der Ausführung von JavaScript auf die beschriebenen zwei Weisen das Ergebnis unterscheiden sollte oder nicht. Ich ging bisher davon aus, dass nicht. JS ausführen = JS ausführen, oder nicht?
lg Caps