可以通过WebBrowser对象正常调用插入到Script字符串中的JavaScript吗?

时间:2013-01-27 05:09:06

标签: c# javascript .net-4.0 webbrowser-control

我可能没有正确地提出这个问题,但我有一个WebBrowser,里面有非常详细的脚本。 我正在使用一些字符串操作将我自己的JavaScript字符串插入其中(只是一个简单的window.external。();行),希望它会调用它,但到目前为止,它还没有。

像这样:

    string script = <WebBrowserObject>.Document.GetElementsByTagName("script")[3].InnerText;
    script = script.Insert(script.IndexOf(<Line to place function call after>) + <length of that line>, <string variable holding my function call>);
    <WebBrowserObject>.Document.GetElementsByTagName("script")[3].InnerText = script;

有一个JavaScript函数反复触发,我需要与显示倒数计时器的表单显示同步。

我也有:

    <WebBrowserObject>.ObjectForScripting = this;

没有显示JavaScript错误,我已经能够通过添加window.external来配合像响应一样的JavaScript。();线路到输入按钮onclick属性和看到的结果。现在,该函数唯一应该做的就是在输出窗口中写一行以确保它有效。 这种方法是否是实现这一预期结果的正确方法?有没有人有更好的方法?

1 个答案:

答案 0 :(得分:0)

据我所知,一旦脚本标签的内容被运行,你就无法再次运行它(你可能能够重置它的标志,如果内容已经运行,但我确定是否存在,这是浏览器特定的事情)。我认为您需要做的是添加一个新的脚本标记,其中包含您想要的代码。如果WebBrowser控件的界面与您在与DOM连接时在javascript中执行的操作类似,则可以创建脚本元素,将文本添加到元素,然后将其附加到DOM的某处(如head那么它应该运行。

在纯粹的javascript中,它就像是。

var head1 = document.getElementsByTagName('head')[0]
var script1 = document.createElement('script');
script1.innerText = "alert('hey');"; //javascript to run.
head1.appendChild(script1)

当然,当你完成后,你可能应该h1111.removeChild(script111)只是为了防止DOM累积脚本....我不知道删除脚本何时安全有什么特别之处在某些浏览器中标记...你可能会立即将其删除(我似乎对于阅读一些建议等待一点的情况似乎有些模糊甚至错误的回忆)。