使用execScript时“指定的转换无效”

时间:2011-10-25 09:50:32

标签: internet-explorer casting ihtmldocument2

我试图在IE中的iframe上执行脚本,但是我得到了#34;指定的强制转换无效"一直以来:

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)时会出现问题。

这很重要,所以说我是从文档完成事件线程的不同线程做的。

你可以帮我解决这个问题吗?

谢谢,

欧米

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

在我不熟悉这个特定用例之前,我曾与IE合作过。一些快速的谷歌搜索引起了一个有趣的注意事项:

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

  

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

如果您不能安全地编写脚本并且iWebBrowser2.Document为null,那可能会导致您的问题?

答案 2 :(得分:1)

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