1

次のコードでクロス サイト スクリプティング エラーが発生します。

Javascript

 function resizeIframe(ifRef) 
            {
                var ifDoc;
                //alert(ifRef);

                try
                { 
                    ifDoc = ifRef.contentWindow.document.documentElement; 
                }
                catch( e )
                {
                   alert(e);
                    try
                    { 
                    ifDoc = ifRef.contentDocument.documentElement; 
                    }
                    catch( ee ){
                             alert(ee);
                          } 
                }
                //var doc = ifRef.height;
                //alert(doc);
                if(ifDoc)
                {
                    ifRef.height = 1; 
                    ifRef.style.height = ifDoc.scrollHeight+'px';               
                }
            }

iframe

<iframe onload="resizeIframe(this)" style="margin-bottom: 16px;" src="ourteamnav/first.php" frameborder="0" scrolling="no" width="597" height="240"></iframe>

エラーは次のとおりです

「e」の場合:

Mozilla Firefox :エラー: プロパティ 'ドキュメント' へのアクセス許可が拒否されました

Google Chrome : TypeError: 未定義のプロパティ 'documentElement' を読み取れません

Internet Explorer: TypeError: アクセス許可が拒否されました

そして 'ee' の場合:

Mozilla Firefox :エラー: プロパティ 'documentElement' にアクセスする権限が拒否されました

Google Chrome : TypeError: null のプロパティ 'documentElement' を読み取れません

Internet Explorer :エラー: アクセスが拒否されました。

ドメインが別のドメインを指しているために発生しているため、一般的な方法では解決できないと思います。したがって、Javascriptのこれらのプロパティを使用せずに、contentDocument.documentElementまたはcontentWindow.document.documentElementその内部コンテンツに従って動的にIframeコンテンツのサイズを変更するために、誰かがそれを解決するように案内してくれますか?

ありがとう

4

2 に答える 2

3

Christopheの回答に加えて、(残念ながら)postMessageすべてのブラウザーで機能するとは限りません。

幸いなことに、Josh Fraserは window.postMessage() の下位互換バージョンをすでに提供しています。postMessageブラウザが-methodをサポートしているかどうかをチェックします。ある場合は、それを使用します。そうでない場合は、 (iframe と親の両方からの) URLを使用してデータを渡します。

次の方法を使用して、両方のウィンドウを相互に「対話」させることができます。

XD.postMessage(msg, src, frames[0]);
XD.receiveMessage(function(message){
    window.alert(message.data + " received on "+window.location.host);
}, 'URL');

構成を正しく設定する必要があるため、ドキュメントを正しく読んでください。

于 2013-02-23T20:09:04.013 に答える
2

おっしゃる通り、これはクロスドメインの問題です。

両方のページを制御できる場合は、postMessage を使用して 2 つのページ間で情報を交換できます。

参考文献:

于 2013-02-23T19:28:07.470 に答える