AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi IE10: "javascript:" versus "execScript"
Thema durchsuchen
Ansicht
Themen-Optionen

IE10: "javascript:" versus "execScript"

Ein Thema von Caps · begonnen am 6. Mai 2013 · letzter Beitrag vom 6. Mai 2013
Antwort Antwort
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#1

IE10: "javascript:" versus "execScript"

  Alt 6. Mai 2013, 12:56
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
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: IE10: "javascript:" versus "execScript"

  Alt 6. Mai 2013, 14:14
Ich finde es ein wenig seltsam, dass du dafür JavaScript Code verwendest statt die Elemente direkt anzusprechen. Warum suchst du dir nicht einfach das passende Element? Wenn du das als HTMLInputElement behandelst, kannst du dort auch checked direkt setzen.

Wie du das Element findest, siehst du hier:
http://www.delphidabbler.com/tips/56
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#3

AW: IE10: "javascript:" versus "execScript"

  Alt 6. Mai 2013, 14:24
Ja, das stimmt. Ich hatte damit aber gleich einen Eventhandler verbunden, der den Prozess auf der Seite fortgesetzt hat.
Das könnte ich vermutlich jetzt über das OnChange-Event des Radio-Buttons lösen, was feuert, wenn ich den Wert setze oder?

lg Caps
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."

Geändert von Caps ( 6. Mai 2013 um 14:28 Uhr) Grund: Interpunktion
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: IE10: "javascript:" versus "execScript"

  Alt 6. Mai 2013, 15:20
Du könntest auch die click() - Methode aufrufen:
Delphi-Quellcode:
var
  Elem: IHTMLElement;
begin
  Elem := ...
  OleCheck(Elem.click());
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#5

AW: IE10: "javascript:" versus "execScript"

  Alt 6. Mai 2013, 15:45
Ah, auch nicht schlecht, danke.
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz