0

我可能没有正确地问这个问题,但我有一个 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 属性并看到结果。现在,该函数唯一应该做的就是在输出窗口中写一行以确保它正常工作。这种方法是实现这一预期结果的正确方法吗?有没有人有更好的方法?

4

1 回答 1

0

据我所知,一旦脚本标签的内容已经运行,你就不能再次运行它(你可能能够重置它的标志,关于内容是否已经运行,但我确定它是否存在,那是浏览器特定的东西)。我认为您需要做的是添加一个新的脚本标签,其中包含您想要的代码。如果 WebBrowser 控件的界面与您在 javascript 中与 DOM 交互时所做的类似,您可以创建一个脚本元素,将文本添加到元素,然后将其附加到 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 累积脚本......我不知道在某些浏览器中何时可以安全删除脚本标签是否有什么特别之处......你可能会立即删除它(我似乎对阅读一些建议稍等片刻的案例有一些模糊甚至不正确的回忆)。

于 2013-01-27T07:05:02.990 回答