“邪恶”的opener
发表时间: August 24, 2010 分类: WebBuild 2条评论
源于空空的这条推:百度搜索结果页的那句 var location; 宛如神来之笔……
。
发散一下,然后在JerryQu及好奇同学的教导下知道了window.opener这个神奇的对象,然后发现它实在调皮又邪恶。他的location属性是个奇怪的东东,是外域虽然不可读却是可写的。
比如我们在页面中这样写(实例可以在http://hi.baidu.com/ivershuo_h右侧友情链接中点击最后一个那个名为“测试”的链接玩):
<script type="text/javascript">
var u = ['baidu.com', 'google.com', 'ivershuo.com'],
i = 0 ,
l = u.length;
setInterval(function(
){
opener.location = 'http://' + u[i];
i++;
i = (i == l?i = 0 : i);
},2000);
</script>
这样在所有链接到这个页面的页面就会出现不停跳转的情况,就算是使用后退按钮退回到先前的页面也一样(这个页面的opener将一直指向打开它的那个窗体)。这样对于一个普通的用户来说会觉得很奇怪。
如果用setTimeout及大延迟时间,然后用户又一直没关闭open(链接执行)页及opener页,且用户回到opener页继续查看,就会导致看到某个时间正在看的页面突然跳转而不知道在后面“捣乱”的却是来自外域的另外一个页面。
而如果针对某个特定的链接来源页(如搜索引擎搜索结果页),还可以预先埋上opener.location的hash到指定的页面id元素上,加上定时还可以让页面“跳舞”。
而如果是搜索引擎快照这样可能导致某些小风险同域风险的页面呢?
p.s:猜测因同步自己twitter显示到网页上的缘故,服务器ip在天朝某些范围处于和谐状态,建议用google reader订阅我的blog,RSS地址:http://feed.ivershuo.com/shuo


已有 2 条评论
#1 阿肆 Says:
August 24th, 2010 at 03:07 am
忘说了,对于opener.location的处理,
firefox、chrome等浏览器是location打开,IE是弹出新窗口(如果是多长执行会弹出多个窗口)
还有,国货W5,强大的sogou不支持这个
#2 猜猜 Says:
August 29th, 2010 at 10:35 pm
厉害,好玩
添加新评论