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 が null の場合、それが問題の原因である可能性がありますか?

于 2011-10-25T10:01:23.590 に答える
1

iframe がメイン ドキュメントに対して非同期に読み込まれるという事実を考慮しましたか? つまりdocumentCompleted、メイン ドキュメントに対して起動した可能性がありますが、iframe はおそらくまだかなりの数秒間ロードされません。iframe が読み込まれたかどうかを判断するのは少し難しいですが、実際に呼び出す前に人為的な遅延 (a-la Timer) を導入してメソッドをテストし、iframe が最初に読み込まれるようにすることができます。お役に立てれば。

于 2011-12-27T12:53:53.370 に答える