0

由于某种原因,此脚本不起作用:

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

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

“$ 未定义”

什么也没有发生。我究竟做错了什么?

4

2 回答 2

1

$可能是 jQuery 实例的参考。您需要将 jQuery 包含到您的网页中才能使其正常工作。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
于 2013-08-13T18:46:52.360 回答
0

Nir Azuelos 提供了部分答案。事实上,要让这段代码在你插入时工作,你需要 jQuery 或其他可以实现这个 API 的东西。(Zepto 可能会工作)

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

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

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

另请参阅为什么当当前页面没有加载 jQuery 时,我可以在 Chrome 的 JS 控制台中使用 jQuery 语法?

此外,如果您只想注入简单的脚本,您可以完全避免使用 jQuery。原则上,如果您在尝试调用之前替换$document.querySelector或分配document.QuerySelector给,您的代码将起作用。$$

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

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

于 2013-08-14T15:16:47.773 回答