我试图在IE内的iframe上执行脚本,但我一直得到"指定的cast无效":
IWebBrowser2 iWebBrowser2 = GetIframe(); //retrieve the iframe (saved in document complete event)
IHTMLDocument2 document = iWebBrowser2.Document as IHTMLDocument2;
document.parentWindow.execScript("alert('test');", "javascript");
当我试图访问文档时,问题发生了。parentwwindow(甚至询问是否文档。= null).
这是很重要的,所以说,我做它从一个不同的线程,文档完成事件线程。
你能帮我解决这个问题吗?谢谢,暗利
我怀疑是线程相关的问题。您不能只从不同的线程访问MSHTML接口,至少在不进行封送处理的情况下是这样。试着在"document complete event thread"也就是主线程上调用你的代码。
虽然我以前使用过IE,但我对这个特定的用例并不完全熟悉。在谷歌上快速搜索一下,出现了一个有趣的注释:
http://msdn.microsoft.com/en-us/library/aa752116 (v = vs.85) . aspx
警告如果文档对象类型对脚本编写不安全,此方法返回成功,但将ppDisp设置为NULL。
如果你不安全的脚本和iWebBrowser2。文档是空的,这可能会导致你的问题?
您是否考虑到iframes异步加载到主文档的事实?这意味着,即使documentCompleted
可能已经为主文档触发,iframe很可能在接下来的几秒钟内仍不会被加载。判断iframe是否已加载有点棘手,但您可以在实际调用该方法之前通过引入人工延迟(a-la Timer)来测试该方法,以便允许iframe首先加载。