Internet explorer &引用;“指定的强制转换无效”;使用execScript时

Internet explorer &引用;“指定的强制转换无效”;使用execScript时,internet-explorer,casting,ihtmldocument2,Internet Explorer,Casting,Ihtmldocument2,我试图在IE内部的iframe上执行脚本,但我始终得到“指定的强制转换无效”: IWebBrowser2 iWebBrowser2 = GetIframe(); //retrieve the iframe (saved in document complete event) IHTMLDocument2 document = iWebBrowser2.Document as IHTMLDocument2; document.parentWindow.execScript("alert('te

我试图在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)时,就会出现问题

这很重要,所以说我是从一个不同的线程来完成的,文档完成了事件线程

你能帮我解决这个问题吗

谢谢


Omri

虽然我以前使用过IE,但我并不完全熟悉这个特定用例。在谷歌上快速搜索会发现一个有趣的提示:

警告如果文档对象类型不适合编写脚本,此方法将成功返回,但将ppDisp设置为NULL


如果脚本编写不安全,且iWebBrowser2.Document为空,则可能是您的问题造成的?

我怀疑是线程相关的问题。您不能只从不同的线程访问MSHTML接口,至少不能不进行编组。尝试在“document complete event thread”(文档完成事件线程)即主线程上调用您的代码。

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

不,我认为这与我从另一个线程执行此操作有关。虽然我添加了延迟,但它仍会引发相同的异常。