这个Javascript条件检查是什么
What's this Javascript condition checking?
广告提供商希望我们在网站上添加一些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;如果已加载,则为窗口。
- 如果我返回表,检查 Ajax 调用是否为 200 OK的最佳方法是什么
- 检查链接对象形式中未定义属性的最佳实践是什么
- 检查全局变量是否存在的正确方法是什么
- 为静态类型检查注释javascript的好解决方案是什么
- 这个Javascript条件检查是什么
- 使用 JQuery 检查空格键的最快方法是什么
- 检查元素是否有类的最佳方法是什么
- 有没有更简单的方法来检查某个父元素的 N 个子元素是什么
- 检查客户端是否可以访问资源的 RESTful 方法是什么?
- 使用javascript从输入文本中检查值的条件是什么
- 检查对象参数是否具有所有必需属性的最有效方法是什么
- 使用JQUery检查字符串的图像url和存在性(如果有效)的真正方法是什么
- 我在另一个网站上的javascript,它检查cookie的域是什么
- 这个正则表达式是什么意思.检查http或https超链接就足够了吗
- 检查动态网页是否已完全加载的最佳方法是什么
- Javascript性能:如何检查是什么使页面变慢
- 在JavaScript数组中检查数字序列的最有效方法是什么
- 在提交之前用javascript检查django表单错误的最好方法是什么?
- 检查多个空值的最佳方法是什么?例如if(foo.bar.giz.mo.)X === 123)
- 检查数据集是否被更改(添加/编辑,删除记录)的最佳解决方案是什么?