2

我正在尝试在 IE 内的 iframe 上执行脚本,但我总是得到“指定的强制转换无效”:

IWebBrowser2 iWebBrowser2 = GetIframe(); //retrieve the iframe (saved in document complete event) 
IHTMLDocument2 document = iWebBrowser2.Document as IHTMLDocument2; 
document.parentWindow.execScript("alert('test');", "javascript"); 

当我尝试访问 document.parentWindow 时会出现问题(即使询问 document.parentWindow != null)。

重要的是,我正在从与文档完成事件线程不同的线程执行此操作。

你能帮我解决这个问题吗?

谢谢,

暗里

4

3 回答 3

2

我怀疑与线程相关的问题。您不能只从不同的线程访问 MSHTML 接口,至少在不做一些编组的情况下不能。尝试在“文档完成事件线程”又名主线程上调用您的代码。

于 2011-11-04T17:38:54.140 回答
1

虽然我在不完全熟悉这个特定用例之前使用过 IE。一些快速的谷歌搜索出现了一个有趣的注释:

http://msdn.microsoft.com/en-us/library/aa752116(v=vs.85).aspx

警告如果文档对象类型对脚本不安全,则此方法成功返回,但将 ppDisp 设置为 NULL。

如果您不安全地编写脚本并且 iWebBrowser2.Document 为空,这可能是导致您的问题的原因吗?

于 2011-10-25T10:01:23.590 回答
1

您是否考虑过 iframe 异步加载到主文档的事实?这意味着即使documentCompleted可能已为主文档触发,iframe 很可能在接下来的几秒钟内仍不会加载。判断 iframe 是否已加载有点棘手,但您可以通过在实际调用之前引入人为延迟(a-la Timer)来测试您的方法,以允许 iframe 首先加载。希望这可以帮助。

于 2011-12-27T12:53:53.370 回答