4

広告プロバイダーは、広告が配信される iframe のサイズを変更できる Javascript をサイトに追加するよう求めています。私はコードを調べてきましたが、その一部は次のループです:

var topIframes = top.document.getElementsByTagName('IFRAME');
for (var i = 0; i < topIframes.length; i++) {
    if (topIframes[i].contentWindow === self) {
        // found iframe that served the ad
        topIframes[i].style.height = sz + 'px';
    }
}

ドキュメント内のすべての iframe を取得し、そのうちの 1 つまたは複数の高さを調整していることがわかります。しかし、私は条件が何をしているのか理解できません。

私は contentWindow が iframe 内のウィンドウであることを知っており、自己とウィンドウの違いは何ですか? 「self」は window オブジェクトへの参照であることがわかります。しかし、どのウィンドウ オブジェクトでしょうか。親ウィンドウまたは iframe 内のウィンドウ? iframe内にウィンドウさえありますか? iframe 内のウィンドウが iframe 内のウィンドウであることを確認するのはなぜですか?

//////////////////////////////////////////

編集

Snuffleapagus のリクエストで、ここに長いバージョンがあります:

<script type="text/javascript">

    // iframe shrink function that needs to be on the hosting page
    rp_resize = function (sz) {
        try {
            var topIframes = top.document.getElementsByTagName('IFRAME');
            for (var i = 0; i < topIframes.length; i++) {
                if (topIframes[i].contentWindow === self) {
                    // found iframe that served the ad
                    topIframes[i].style.height = sz + 'px';
                }
            }
        } catch (e) {
        }
    }

</script>

<script>

    // this is the code that goes in the passback to initiate the function
    try {
        if (typeof(rp_mpu) === 'function') {
            rp_resize(250);
        }
    } catch (e) {

    }

</script>

<script language="JavaScript" type="text/javascript">
rp_account   = '<account-id>';
rp_site      = '<site-id>';
rp_zonesize  = '<zone-id>-<size-id>';
rp_adtype    = 'js';
rp_smartfile = 'http://<url>/..../revv_smart_file.html';    // this should be the URL path to the friendly iframe that needs resizing
</script>
<script type="text/javascript" src="http://ads.<url>.com/ad/<account-id>.js"></script>

//////////////////////////////////////////

編集

状態に関する私の質問に対する広告プロバイダーからの回答のヒントを次に示します。彼は開発者ではないので、それがどの程度使用されているかはわかりません。

「あなたが見ているコード行は、関数が開始された iFrame であるかどうかを判断しようとしているので、それに応じてサイズを変更できます。」

4

3 に答える 3

0

self親ウィンドウを指すと思います。確認するには、ブラウザ コンソールに次のように入力し、結果を確認します。

self == window
于 2013-11-05T17:02:19.067 に答える
0

.contentWindowが完全にロードされていないnull場合に返されます。iframeコードが をループしてiframes、ロードされているかどうかを確認し、ロードされている場合はサイズを変更しているようです。

編集:musefanは正しいです。私はそれを間違って言いました。

編集 2:Why check that the window inside an iframe is the window inside an iframe?まだロードされていない場合は null です。ロードされている場合、それはウィンドウです。

于 2013-11-05T17:17:19.420 に答える