这个Javascript条件检查是什么

What's this Javascript condition checking?

本文关键字:是什么 检查 条件 Javascript 这个      更新时间:2023-09-26

广告提供商希望我们在网站上添加一些Javascript,以便他们调整投放广告的iframe的大小。我一直在浏览代码,其中一部分是这个循环:

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 并调整其中一个或多个的高度。但我无法弄清楚这种情况在做什么。

我知道contentWindow是iframe中的窗口,看看self和window有什么区别?我看到"self"是对窗口对象的引用。但是哪个窗口对象呢?父窗口还是 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,以便可以相应地调整其大小。"

根据我对使用Javascript的理解以及它如何访问iFrames,提供商假设页面上有多个iFrame。 此外,它假设他们正在寻找的 iFrame 没有易于引用的 ID。

基于此,在加载包含广告内容的框架后,它会在某个时候调用 rp_resize(250);。 但是,该函数rp_resize不知道从页面上的哪个 iFrame 调用它。 该脚本循环遍历页面上的所有 iFrame,直到找到调用该函数的 iFrame。 这就是它知道要调用哪个帧的方式。

希望这是有意义的和/或回答你的问题。

我认为

self指的是父窗口。要进行检查,请在浏览器控制台中键入以下内容并查看结果:

self == window

如果iframe尚未完全加载,.contentWindow将返回null。看起来代码正在循环iframes,检查它们是否已加载,如果是,请调整它们的大小。

编辑:穆斯凡是对的;我说错了。

编辑 2: Why check that the window inside an iframe is the window inside an iframe? 如果尚未加载,则为 null;如果已加载,则为窗口。