插入到脚本字符串中的 JavaScript 是否可以由 WebBrowser 对象正常调用

Can JavaScript inserted into a Script string be called as normal by a WebBrowser object?

本文关键字:对象 WebBrowser 常调用 调用 字符串 脚本 是否 JavaScript 插入      更新时间:2023-09-26

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

这样:

    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 的响应。();行到输入按钮单击属性和查看的结果。现在,该函数唯一应该做的就是在输出窗口中写一行以确保它正常工作。这种方法是实现此预期结果的正确方法吗?有没有人有更好的方法?

我所知,一旦运行了脚本标签的内容,你就不能再次运行它(你也许可以重置它关于内容是否已运行的标志,但我确定是否存在,那是浏览器特定的事情)。 我认为您需要做的是添加一个带有所需代码的新脚本标签。 如果 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 积累脚本...... 我不知道在某些浏览器中何时可以安全地删除脚本标签是否有任何特别之处......您可能会立即删除它(我似乎对阅读某些建议稍等片刻的情况有一些模糊的、可能是不正确的回忆)。