你的位置:快乐忆站 \ 前端 \ 文章正文

防止parent.window.opener.location刷新页面

前两天在调整底部的付费链接的时候无意间打开了其中一个,很诡异的事发生了,我点了链接,也在新选项卡中打开了页面,但是我博客的页面会被强制打开一个凡客的广告链接,在检查确定自己代码没有任何点击动作之后我怀疑自己网站被挂广告了!结果排查了很久也没有发现任何被挂的代码在哪里。

这时候我试着去看了下被打开的页面的源文件,这才发现,原来问题不是出在我自己的博客的代码,而是被这个打开的页面强制跳转到他的一个指定页面去了!!!尼玛!!!坑爹啊!!!真TM的流氓!!!

不过气愤之后我就在想,他怎么能把我的网页给跳转到其他网页去了?又没有在我网站挂任何代码,是啥原理呢?我们先看看他的代码吧:

if(parent.window.opener)
parent.window.opener.location='http://click.linktech.cn/?m=vancl&a=A100046207&l=00113&l_cd1=0&l_cd2=0&u_id=lipinka2';

正是这个parent.window.opener.location把我的网页给强刷了!这东东以前很少见到过,于是昨天我和另外一位同事写代码测试了一把,发现这个东西还真的能把一个网站的来源页给跳转掉,不过有一个前提条件:a链接必须指定target属性为“_blank”,target值为其他的都不行,没有target属性也不行。

问题发现了,怎么解决呢?

最简单的办法就是不要设置target="_blank"。如果我们必须在新窗口或新选项卡中去打开链接肿么办呢?看下面的方法。

这个方法是从网上找来的,大致原理就是通过onclick事件去打开这个会导致跳转的链接,然后在onclick里面用open方法去打开链接,设置opener方法为null即可阻止页面跳转,具体解决代码如下:

function openSite(o){
	win = window.open(o.href,"_blank");
	win.opener = null;
	return false;
}

调用示例:

<a href="http://localhost/demo.html" target="_blank" onclick="return openSite(this)">demo</a>

这个方法是目前比较好的办法,但是一点缺点是在每一个会导致跳转的链接的onclick事件里面都要调用,增加了工作量,治标不治本。最直接最彻底的办法就是全部a标签都不要设置target属性,让用户自己去选择改用什么方式去打开你这个链接,这样就不会被上面那串广告代码利用了。

针对上面的代码我做了如下的DEMO,欢迎测试!

最后,小小的鄙视一下有这种做法的网站,坑爹啊!

« 上一篇

说两句吧:

*

*

正在回复: 取消

  1. 23#
    xiaoli
    xiaoli Google Chrome 26.0.1410.64 Windows 7 2013-05-06 15:25 回复
    这个不能覆盖掉浏览器后退按钮。点击后退还是返回。
    小松
    小松 Google Chrome 26.0.1410.65 Mac OS X 10.8.3 2013-05-06 16:52 回复
    @xiaoli:浏览器后退按钮还真没考虑过
    xiaoli
    xiaoli Google Chrome 26.0.1410.64 Windows 7 2013-05-06 16:57 回复
    @小松: 实现无法后退容易不?
    小松
    小松 Google Chrome 26.0.1410.65 Mac OS X 10.8.3 2013-05-07 09:09 回复
    @xiaoli:没试验过,你可以尝试弄弄看~
  2. 22#
    小晋
    小晋 Internet Explorer 9.0 Windows Vista 2012-03-04 11:05 回复
    小松老师、我对不起你啊,每次来的都发现你的bug,VISTA下IE9测试结果:
    小晋
    小晋 Internet Explorer 9.0 Windows Vista 2012-03-04 11:10 回复
    @小晋:我先从博客正文点击了DEMO,然后:
        第一项没有target的:
            直接点击后,博客正文被跳转到首页,演示页面到了“POP层演示”
            右键:新窗口/新选项卡,博客正文没事,演示页面被跳转到首页,新开窗口显示“POP”
        第二项:
            没啥说的,博客正文没事,演示页面被跳转到首页,新开窗口显示“POP”
        第三项,小松老师的办法:
            没有作用,依然是博客正文没事,演示页面被跳转到首页,新开窗口显示“POP”
    小松
    小松 Google Chrome 17.0.963.56 Windows 8 x64 Edition 2012-03-04 19:46 回复
    @小晋:vista啊,我这边没有啊,没法测试。。。
  3. 21#
    deardongdong
    deardongdong Google Chrome 15.0.874.106 Windows XP 2011-11-18 14:05 回复
    技术很高深啊!
    小松
    小松 Google Chrome 16.0.889.0 Windows 7 2011-11-18 18:09 回复
    @deardongdong:是别人高深,我只是想对策而已~
  4. 20#
    dnf
    dnf Firefox 3.6.23 Windows XP 2011-11-09 15:45 回复
    学习了。
  5. 19#
    梦之源泉
    梦之源泉 Internet Explorer 7.0 Windows XP 2011-11-03 15:16 回复
    没仔细看,也懒得看具体的细节。但大概明白了。这个代码果然销魂且yd,BS之。还搞人的来源页。going down。。
    小松
    小松 Firefox 7.0.1 Windows 7 2011-11-03 15:19 回复
    @梦之源泉:就是这么YD~
  6. 18#
    朵未
    朵未 Maxthon 3.0 Windows XP 2011-10-27 09:08 回复
    呵呵,解决了就好,就当多学点知识吧。
    小松
    小松 Google Chrome 16.0.889.0 Windows 7 2011-10-27 09:19 回复
    @朵未:是啊,必须的~
  7. 17#
    博彩通
    博彩通 Maxthon 3.0 Windows XP 2011-10-26 08:31 回复
    嘿嘿 这个不错哈 感觉挺好用的啊
  8. 16#
    代码如诗
    代码如诗 Google Chrome 13.0.782.112 Windows XP 2011-10-23 22:30 回复
    这个还真见过, 在百度的搜索结果里也有这样的  
    小松
    小松 Nokia Web Browser Nokia Series60 2011-10-24 19:11 回复
    @代码如诗:我以前都没见过…
  9. 15#
    szo拜倒网orz
    szo拜倒网orz Firefox 7.0.1 Windows 7 2011-10-23 20:04 回复
    那句去掉不就行了吗
    小松
    小松 Google Chrome 14.0.835.202 Windows 7 2011-10-23 21:17 回复
    @szo拜倒网orz:那如果不得不留着呢?总得想办法阻止他刷页面的
  10. 14#
    箴言
    箴言 Google Chrome 16.0.899.0 Windows 7 2011-10-22 22:25 回复
    算了,没看懂。
    小松
    小松 Google Chrome 14.0.835.202 Windows 7 2011-10-22 22:50 回复
    @箴言:哈哈,没看懂就算了,常来~
1 2 3

随机日志:

推荐日志:

彩色标签:

sitemap