0

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

请注意,我没有同时在我的页面中包含两个 Javascript。我在这个例子中只包括了两者。

有人可以解释为什么这个方法在调用“Password_Reset.js”文件中的函数时不能按预期工作吗?

我尝试设置完全权限:[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]

并且还使这个应用程序 Com 可见:[System.Runtime.InteropServices.ComVisibleAttribute(true)]

编辑:我想要实现的是能够在 webBrowser1.Navigate("URL"); 之后运行 Javascripts。当它们被写入页面代码时,如下所示:

<script type="text/javascript" src="/L1/L2/Password_Reset.js"></script>

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

4

2 回答 2

0

我不确定您要完成什么。

不过,我建议你看一下启动脚本注册方法。如果你使用它们,一个 JavaScript 函数将在 html 文档加载后在客户端浏览器中执行。

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

于 2013-02-03T22:45:23.093 回答
0

最后,解决方案非常简单,而且有点明显。我有点尴尬。

浏览器控制文档完成后:

webBrowser1.DocumentCompleted +=new WebBrowserDocumentCompletedEventHandler(webBrowserTest_DocumentCompleted);

事件已被调用,何时:

webBrowser1.PerformLayout();

已经运行,Javascripts,在这个阶段还没有完全加载,我可以看到。如果我设置一个延迟计时器并计算 1000 毫秒,然后调用我的 Javascript,那么整个事情就可以完美运行。除非通过延迟对我的 javascript 的调用,反过来允许后台的另一个问题自行解决?

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

我希望其他人发现这很有用,并且可以节省我花在解决这个问题上的时间。

于 2013-02-04T09:08:38.237 回答