第一个问题是如此温和。我一直在尝试一些涉及webbrowser组件的项目。我想在谷歌中设置搜索字符串。我在这台机器上安装了IE9。我运行以下代码:
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
来自webbrowser的html放在文本框中。
<meta content="IE=edge" http-equiv="X-UA-Compatible">
表示应该使用最好的IE? webbrowser似乎在IE7兼容模式下运行。 GetElementById(“q”)也适用,但是来自html
id="lst-ib" class="gsfi" title="Search" name="q".
所以我猜我有2个问题。为什么webbrowser似乎在兼容模式下运行,为什么GetElementById似乎在处理名称。
更新:我补充说:
dumstr = WebBrowser1.Document.InvokeScript("eval", {"javascript:navigator.appVersion"})
MsgBox(dumstr)
表示ie7的输出正在起作用。
我还在HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION中添加了我的.exe名称,其值为9999,但我们仍在ie7模式下运行
答案 0 :(得分:2)
作为后续跟进:Internet Explorer允许getElementById引用name和id属性。相关的帮助说明是:返回对具有ID或NAME属性的指定值的第一个对象的引用。但是从ie8开始:Windows Internet Explorer 8及更高版本。在IE8标准模式下,getElementById仅对ID属性执行区分大小写的匹配。在IE7标准模式和以前的模式中,此方法对ID和NAME属性执行不区分大小写的匹配,这可能会产生意外结果。随着对注册表的更改,我的项目不再处于ie7模式,基于navigator.appVersion的输出以及google提供更新的html代码($(“#gbqfq”)而不是$(“#lst- ib“)。但是getElementById似乎仍然适用于名字。奇怪......