1

对于我可能使用的任何用词不当,我立即道歉。

我有一系列由 PHP 生成的网页,我正在使用 WebBrowser 控件进行操作。这些页面定义了隐藏在正文中的 JavaScript 函数(这对我来说很愚蠢,我没有编写它们,我只需要使用它们)。

是否可以使用 Document.InvokeScript 方法访问这些函数,如果没有,我可以做些什么来访问它们?

4

3 回答 3

1

Windows 窗体的实现使用 IDispatch.GetIDsOfNames在脚本引擎的顶级命名项中查找函数名称的完全匹配。对于 MSHTML 的活动脚本接口的 JScript 实现,顶级命名项是

您实际上并不需要将新的命名项添加到脚本引擎(如果您真的愿意,可以通过 IDispatchEx 进行),有很多方法可以使用现有的命名项执行代码,例如

您可以使用上述之一作为在 HtmlDocument.InvokeScript 中调用的脚本方法的名称,并在附加参数中传递代码。

于 2013-01-24T20:50:13.090 回答
0

是的 - JavaScript 中的所有函数都可以同样访问。

笔记

  • 一些 JavaScript 文件可能不会很早就加载 - 您需要正确等待(文档准备好/完成,或来自页面/简单超时的自定义通知)直到加载所有脚本。
  • 可以将 JavaScript 函数设为“私有”——不能通过window.FuncitionName(...)在 JavaScript 中使用来调用——你也无法通过 InvokeScript 调用此类函数。

这种“私人”功能的示例如下:

$(function(){  
   ....
   function MyHiddenFunction() {
     // you can't call be from outside!!!!
   }
});
于 2013-01-24T17:34:05.693 回答
0

我找到了答案(发生了一些事情,我无法再访问我的帐户,所以如果有人也能回答我,那就太好了),但答案是:WebBrowser 使用 IE7,而 IE7 是一团糟。

IE9 执行脚本就好了。所以我不得不强制它使用IE9

这是通过使用此处给出的答案完成的:

WebBrowser 控件和 JavaScript 错误

所以……万岁!

于 2013-01-24T18:54:39.647 回答