2012-03-25 12 views
0

Erste Frage so sei sanft. Ich habe einige Projekte mit der Webbrowser-Komponente versucht. Ich wollte einfach den Suchbegriff in Google setzen. Ich habe IE9 auf dieser Maschine installiert. Ich führe den folgenden Code:Webbrowser läuft im Kompatibilitätsmodus

Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown 
    Dim dumstr As String = "" 
    Dim jqCheck As Boolean = False 
    Dim dum As Object 
    WebBrowser1.Navigate("http://www.google.com/ncr") 
    Do While WebBrowser1.IsBusy = True Or WebBrowser1.ReadyState <> WebBrowserReadyState.Complete 
     Application.DoEvents() 
    Loop 
    dum = {"javascript:var element1 = document.createElement(""script"");element1.src = ""https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"";document.getElementsByTagName(""head"")[0].appendChild(element1);"} 
    WebBrowser1.Document.InvokeScript("eval", dum) 
    Do While Not jqCheck 
     Application.DoEvents() 
     jqCheck = WebBrowser1.Document.InvokeScript("eval", {"javascript:jqCheck=!(typeof $==='undefined');jqCheck"}) 
    Loop 
    dumstr = WebBrowser1.Document.InvokeScript("eval", {"javascript:document.documentElement.innerHTML"}) 
    TextBox1.Text = dumstr 
    WebBrowser1.Document.InvokeScript("eval", {"javascript:$(""#lst-ib"").attr('value','I was here')"}) 
    Application.DoEvents() 
    dumstr = WebBrowser1.Document.Forms(0).Document.GetElementById("q").GetAttribute("value") 
    System.Threading.Thread.Sleep(5000) 
    WebBrowser1.Document.GetElementById("q").SetAttribute("value", "I was here first") 

End Sub 

Der HTML-Code von Webbrowser wird in das Textfeld eingefügt.

<meta content="IE=edge" http-equiv="X-UA-Compatible"> 

Gibt an, dass der beste verfügbare IE verwendet werden sollte? Der Webbrowser scheint im IE7-Kompatibilitätsmodus ausgeführt zu werden. Auch getElementByID ("q") funktioniert, aber von der html

id="lst-ib" class="gsfi" title="Search" name="q". 

Also ich denke, ich habe 2 Fragen. Warum scheint der Webbrowser im Kompatibilitätsmodus zu laufen und warum scheint GetElementById an einem Namen zu arbeiten?

UPDATE: Ich fügte hinzu:

dumstr = WebBrowser1.Document.InvokeScript("eval", {"javascript:navigator.appVersion"}) 
MsgBox(dumstr) 

die Ausgabe angegeben IE7 bei der Arbeit war.

Ich habe auch zu HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ Featurecontrol \ FEATURE_BROWSER_EMULATION die Namen meines .exe mit einem 9999-Wert hinzugefügt, aber wir laufen noch im IE7-Modus

Antwort

2

Als Follow-up: Internet Explorer darf getElementById sowohl den Namen als auch das ID-Attribut referenzieren. Die relevante Hilfebeschreibung lautet: Gibt einen Verweis auf das erste Objekt mit dem angegebenen Wert des ID- oder NAME-Attributs zurück. Ab ie8 jedoch: Windows Internet Explorer 8 und höher. Im IE8-Standards-Modus führt getElementById nur für das Attribut ID eine Unterscheidung zwischen Groß- und Kleinschreibung durch. Im IE7-Standards-Modus und in den vorherigen Modi führt diese Methode bei den Attributen ID und NAME eine Übereinstimmung zwischen Groß- und Kleinschreibung durch, die zu unerwarteten Ergebnissen führen kann. Mit den Änderungen in der Registry befindet sich mein Projekt nicht mehr im ie7-Modus, basierend auf der Ausgabe von navigator.appVersion und der Tatsache, dass Google den neueren HTML-Code ($ ("# gbqfq") statt $ ("# lst- ib "). Jedoch scheint getElementById immer noch auf Namen zu funktionieren. Seltsam ...

Verwandte Themen