Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以在header元素中未定义的JavaScript函数上使用WebBrowser.Document.InvokeScript吗?_C#_Php_Javascript_.net 4.0_Webbrowser Control - Fatal编程技术网

C# 我可以在header元素中未定义的JavaScript函数上使用WebBrowser.Document.InvokeScript吗?

C# 我可以在header元素中未定义的JavaScript函数上使用WebBrowser.Document.InvokeScript吗?,c#,php,javascript,.net-4.0,webbrowser-control,C#,Php,Javascript,.net 4.0,Webbrowser Control,我立即为我可能使用的任何误称道歉 我有一系列由PHP生成的网页,我正在使用WebBrowser控件处理这些网页。这些页面定义了隐藏在正文中的JavaScript函数(这对我来说很愚蠢,我没有编写它们,我只是需要使用它们) 是否可以使用Document.InvokeScript方法访问这些函数,如果不可以,我可以做些什么来访问它们?是-JavaScript中的所有函数都可以同等访问 注释 有些JavaScript文件可能不会很早加载-您需要正确等待(文档准备就绪/完成,或来自页面的自定义通知/简

我立即为我可能使用的任何误称道歉

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


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

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

注释

  • 有些JavaScript文件可能不会很早加载-您需要正确等待(文档准备就绪/完成,或来自页面的自定义通知/简单超时),直到加载所有脚本
  • 可以将JavaScript函数设置为“private”-在JavaScript中使用
    window.functionname(…)
    不可调用-也不能通过InvokeScript调用此类函数
此类“专用”功能的示例如下:

$(function(){  
   ....
   function MyHiddenFunction() {
     // you can't call be from outside!!!!
   }
});

是-JavaScript中的所有函数都具有同等的可访问性

注释

  • 有些JavaScript文件可能不会很早加载-您需要正确等待(文档准备就绪/完成,或来自页面的自定义通知/简单超时),直到加载所有脚本
  • 可以将JavaScript函数设置为“private”-在JavaScript中使用
    window.functionname(…)
    不可调用-也不能通过InvokeScript调用此类函数
此类“专用”功能的示例如下:

$(function(){  
   ....
   function MyHiddenFunction() {
     // you can't call be from outside!!!!
   }
});
我找到了答案(发生了一些事情,我无法再访问我的帐户,因此如果有人也能回答我,那就太棒了),但答案是: WebBrowser使用IE7,IE7是一堆垃圾

IE9可以很好地执行脚本。 所以我必须强迫它使用IE9

这是通过以下给出的答案实现的:

所以。。。万岁

我找到了答案(发生了一些事情,我无法再访问我的帐户,因此如果有人也能回答我,那就太棒了),但答案是: WebBrowser使用IE7,IE7是一堆垃圾

IE9可以很好地执行脚本。 所以我必须强迫它使用IE9

这是通过以下给出的答案实现的:


所以。。。万岁

Windows窗体的实现使用IDispatch.GetIDsOfNames在中查找函数名的精确匹配项。对于MSHTML的JScript实现,顶级命名项为

  • 成员(注意,假设您的代码是用jscript编写的,对于vb脚本代码可见的全局变量,请选中)
  • 的成员(是否想过为什么可以直接使用document.write或XMLHttpRequest?)
您实际上不需要向脚本引擎添加新的命名项(如果确实需要,可以通过IDispatchEx进行添加),例如,有许多方法可以使用现有命名项执行代码

  • 来自jscript globals的函数
  • 窗口对象中的函数
  • 窗口对象中的函数

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

Windows窗体的实现使用IDispatch.GetIDsOfNames在中查找函数名的精确匹配项。对于MSHTML的JScript实现,顶级命名项为

  • 成员(注意,假设您的代码是用jscript编写的,对于vb脚本代码可见的全局变量,请选中)
  • 的成员(是否想过为什么可以直接使用document.write或XMLHttpRequest?)
您实际上不需要向脚本引擎添加新的命名项(如果确实需要,可以通过IDispatchEx进行添加),例如,有许多方法可以使用现有命名项执行代码

  • 来自jscript globals的函数
  • 窗口对象中的函数
  • 窗口对象中的函数

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

那么,这能解释为什么当我试图直接与加载到webbrowser控件中的网页交互时,会出现javascript错误吗?因为函数还没有加载,而且“不存在”?如果它们位于页眉中,加载速度会更快吗?不知道页面失败的原因。至于引用JavaScript文件/在HEAD中添加JavaScript:JavaScript按照它们在文档中显示的顺序进行解析,所以是的-HEAD中的一次将很早加载。这是否解释了为什么当我尝试直接与加载到webbrowser控件中的网页交互时,会出现JavaScript错误?因为函数还没有加载,而且“不存在”?如果它们位于页眉中,加载速度会更快吗?不知道页面失败的原因。至于引用JavaScript文件/在HEAD中添加JavaScript:JavaScript按照它们在文档中显示的顺序进行解析,所以是的,HEAD中的once将很早加载。