web-dev-qa-db-ja.com

IFrameにイベントリスナーを追加する

IFrameにイベントリスナーを追加することは可能ですか?私はこのコードを試しましたが、それはうまくいかないようです。

document.getElementsByTagName('iframe')[0].contentWindow.window.document.body.addEventListener('afterLayout', function(){
                console.log('works');
            });
 _

私はIDによって要素を取得し、私が使用しているJavaScriptフレームワークを使ってリスナーを追加してみました。

Ext.fly("iframeID").addListener('afterLayout', function(){ alert('test'); });
 _

IFrameで関数を呼び出すことができるので、セキュリティが問題ではありません。何か案は?

10
Ronald

私は「AfterLayout」のイベントを扱うことは決してなかったが、よりブラウザ互換コードのために使用することはできません(iframe.contentWindow || iframe.contentDocument) それ以外の iframe.contentWindow

好きなことを試してみてください

var iframe = document.getElementsByTagName('iframe')[0],
    iDoc = iframe.contentWindow     // sometimes glamorous naming of variable
        || iframe.contentDocument;  // makes your code working :)
if (iDoc.document) {
    iDoc = iDoc.document;
    iDoc.body.addEventListener('afterLayout', function(){
                        console.log('works');
                });
};
 _

それが助けることを願っています。

11

USTで深刻なIFRAME機能を実行している場合は、ManagedIframeユーザー拡張子を調べてください。

http://www.extjs.com/forum/showthread.php?t=40961

それは内蔵のイベントとクロスフレームメッセージング、そして他の多くの利点を特徴としています。

4
Brian Moeskau