使用可执行文件时"specified cast not valid"



我试图在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首先加载。

相关内容

最新更新