通过* .js加载Javascript然后调用JavaScript函数

时间:2013-02-03 22:36:42

标签: c# javascript browser

我已经做了很多阅读,但我不明白为什么这不起作用。我正在使用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>

编辑:在重新阅读我的问题时,我想知道这个问题是否是文件夹级问题并且脚本没有加载?有人可以就此提出建议吗?

2 个答案:

答案 0 :(得分:0)

我不确定你想要完成什么。

但是,我建议您查看启动脚本注册方法。如果您使用它们,则在加载html文档后,将在客户端浏览器中执行JavaScript函数。

查看this文章。也许你可以用它来解决你的问题。

答案 1 :(得分:0)

最终,解决方案非常简单,而且显而易见。我有点尴尬。

浏览器控制文档完成后:

webBrowser1.DocumentCompleted +=new WebBrowserDocumentCompletedEventHandler(webBrowserTest_DocumentCompleted);

事件已被调用,以及何时:

webBrowser1.PerformLayout();

已经运行,Javascripts,在这个阶段还没有从我能看到的东西中完全加载。如果我设置延迟计时器并计数1000毫秒然后调用我的Javascript,整个过程完美。这是因为,通过延迟调用我的javascript,反过来允许后台的另一个问题自行解决?

我想接下来要解决的问题是,为什么DocumentCompleted事件处理程序不包含按照人们期望的方式加载脚本。

我希望其他人觉得这很有用,它可以节省我花在解决问题上的时间。