WebBrowser调用脚本无法正常工作

时间:2013-08-13 18:42:48

标签: c# javascript jquery browser

由于某些原因,此脚本无效:

element.text = "function TestClick() { $('" + testElement + "').click() }";
head.AppendChild(testScript);
webBrowser2.Document.InvokeScript("TestClick");

webBrowser2控件位于http://google.com,变量testElement等于.gbts。如果我在Google上的Chrome上的开发者工具上运行脚本$("gbts").click();,它可以正常工作,但是当我尝试将脚本调用到WebBrowser控件中时,我收到错误

  

“$未定义”

没有任何反应。我做错了什么?

2 个答案:

答案 0 :(得分:1)

$可能是jQuery实例的引用。您需要在网页中包含jQuery才能使其正常工作。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

答案 1 :(得分:0)

Nir ​​Azuelos提供了部分答案。实际上,为了使代码在插入时能够正常工作,您需要jQuery或其他可以实现此API的代码。 (Zepto可能会奏效)

它在Chrome控制台中的作用原因是Chrome在控制台中定义了$$$(以及其他),以方便开发人员使用。

在控制台中,如果您键入$并看到function $() { [Command Line API] }作为输出,则表示页面本身未定义$。因此,页面中的任何脚本都无法使用它。

请注意,Chrome控制台中提供的$ function与jQuery提供的$函数完全不同。在Chrome控制台中,$(默认情况下)映射到类似于document.querySelector的行为。有关文档,请参阅https://developers.google.com/chrome-developer-tools/docs/console

另见Why am I able to use jQuery syntax in Chrome's JS console when current page doesn't have jQuery loaded?

此外,如果您只想注入简单的脚本,您可以完全避免使用jQuery。原则上,如果您要先将$替换为document.querySelector,或者在尝试呼叫document.QuerySelector之前将$分配给$,您的代码就会有用。

"function TestClick() { document.querySelector('" + testElement + "').click() }";

原生DOM API和jQuery之间存在很大差异,因此您应该决定使用哪一个。