我已经做了很多阅读,但我不明白为什么这不起作用。我正在使用VS2010当前更新。我想将网页加载到C#Web浏览器控件(此应用程序是Windows窗体应用程序):
this.webBrowser1.Navigate("https://mydomain/L1/L2/L3/L4/webpage.asp");
this.webBrowser1.PerformLayout();
根据我的理解,要从C#调用Javascript函数,可以使用:
this.webBrowser1.Document.InvokeScript("passwordReset");
或者如果有参数传递:
object[] parameters = new object[3];
parameters[0] = “1”;
parameters[0] = false;
parameters[0] = “3”;
webBrowser1.Document.InvokeScript("passwordReset", parameters);
我的网页代码如下。我已经展示了我尝试过的两种方法。如果我将Javascript插入页面,似乎有效。
由于我的限制,我不想使用这种方法。我需要能够调用* .js文件,如下所示:
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>My Test Page...</title>
<script type="text/javascript" language="javaScript">
function passwordReset()
{
alert("You're about to change your password!!");
}
</script>
<script type="text/javascript" src="/L1/L2/Password_Reset.js"></script>
</head>
请注意,我不会同时在我的页面中同时包含两个Javascripts。我在这个例子中只包含了两个。
有人可以解释为什么这个方法在调用“Password_Reset.js”文件中的函数时没有按预期工作?
我尝试过设置完整权限:[PermissionSet(SecurityAction.Demand,Name =“FullTrust”)]
并使这个应用程序Com Visible:[System.Runtime.InteropServices.ComVisibleAttribute(true)]
编辑:我想要实现的是能够在webBrowser1.Navigate(“URL”)之后运行Javascripts;当它们被写入页面代码时如下:
<script type="text/javascript" src="/L1/L2/Password_Reset.js"></script>
编辑:在重新阅读我的问题时,我想知道这个问题是否是文件夹级问题并且脚本没有加载?有人可以就此提出建议吗?
答案 0 :(得分:0)
我不确定你想要完成什么。
但是,我建议您查看启动脚本注册方法。如果您使用它们,则在加载html文档后,将在客户端浏览器中执行JavaScript函数。
查看this文章。也许你可以用它来解决你的问题。
答案 1 :(得分:0)
最终,解决方案非常简单,而且显而易见。我有点尴尬。
浏览器控制文档完成后:
webBrowser1.DocumentCompleted +=new WebBrowserDocumentCompletedEventHandler(webBrowserTest_DocumentCompleted);
事件已被调用,以及何时:
webBrowser1.PerformLayout();
已经运行,Javascripts,在这个阶段还没有从我能看到的东西中完全加载。如果我设置延迟计时器并计数1000毫秒然后调用我的Javascript,整个过程完美。这是因为,通过延迟调用我的javascript,反过来允许后台的另一个问题自行解决?
我想接下来要解决的问题是,为什么DocumentCompleted事件处理程序不包含按照人们期望的方式加载脚本。
我希望其他人觉得这很有用,它可以节省我花在解决问题上的时间。