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

防止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. 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啊,我这边没有啊,没法测试。。。
  2. 21#
    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:是别人高深,我只是想对策而已~
  3. 20#
    dnf Firefox 3.6.23 Windows XP
    2011-11-09 15:45
    学习了。
  4. 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~
  5. 18#
    朵未 Maxthon 3.0 Windows XP
    2011-10-27 09:08
    呵呵,解决了就好,就当多学点知识吧。
    小松 Google Chrome 16.0.889.0 Windows 7
    2011-10-27 09:19
    @朵未:是啊,必须的~
  6. 17#
    博彩通 Maxthon 3.0 Windows XP
    2011-10-26 08:31
    嘿嘿 这个不错哈 感觉挺好用的啊
  7. 16#
    代码如诗 Google Chrome 13.0.782.112 Windows XP
    2011-10-23 22:30
    这个还真见过, 在百度的搜索结果里也有这样的  
    小松 Nokia Web Browser Nokia Series60
    2011-10-24 19:11
    @代码如诗:我以前都没见过…
  8. 15#
    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:那如果不得不留着呢?总得想办法阻止他刷页面的
  9. 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
    @箴言:哈哈,没看懂就算了,常来~
  10. 13#
    小牡 Internet Explorer 8.0 Windows XP
    2011-10-22 12:54
    好YD的说
    小松 Google Chrome 14.0.835.202 Windows 7
    2011-10-22 13:07
    @小牡:这个方法确实很YD
  11. 12#
    Internet Explorer 7.0 Windows 7 x64 Edition
    2011-10-22 09:11
    又见技术贴
    小松 Google Chrome 14.0.835.202 Windows 7
    2011-10-22 10:45
    @搜:有何感想?
  12. 11#
    小子 Google Chrome 16.0.904.0 Windows XP
    2011-10-20 15:46
    徐老师,啥时候换CHROME了
    小松 Google Chrome 16.0.889.0 Windows 7
    2011-10-20 17:39
    @小子:早就换了~
  13. 10#
    林西老九 Internet Explorer 9.0 Windows 7 x64 Edition
    2011-10-20 15:25
    真牛比,这给我过滤了啊,过滤到哪去了?给我放出来
    小松 Google Chrome 16.0.889.0 Windows 7
    2011-10-20 15:38
    @林西老九:放出来了~
  14. 9#
    林西论坛 Internet Explorer 9.0 Windows 7 x64 Edition
    2011-10-20 15:24
    兄弟,不好意思,我放条外链啊,哈哈
    小松 Google Chrome 16.0.889.0 Windows 7
    2011-10-20 17:38
    @林西论坛:没事,需要的话我跟你一个广告位,提供图片给我即可
  15. 8#
    沫沫 Internet Explorer 8.0 Windows XP
    2011-10-20 15:19
    虽然不怎么看得不懂,不过这思路真是清晰呀!!!
    小松 Google Chrome 16.0.889.0 Windows 7
    2011-10-20 17:36
    @沫沫:你怎么知道思路?
    沫沫 Internet Explorer 8.0 Windows XP
    2011-10-21 11:11
    @小松:感觉呢 我感觉很灵的
    小松 Google Chrome 16.0.889.0 Windows 7
    2011-10-21 12:28
    @沫沫:你不懂,你咋知道?
    沫沫 Internet Explorer 8.0 Windows XP
    2011-10-21 14:14
    @小松:都说感觉了  真是 语文没学好
    小松 Google Chrome 16.0.889.0 Windows 7
    2011-10-21 14:17
    @沫沫:好吧,我错了~
  16. 7#
    沫沫 Internet Explorer 8.0 Windows XP
    2011-10-20 15:16
    沙发木有了,抢凳子
    小松 Google Chrome 16.0.889.0 Windows 7
    2011-10-20 17:35
    @沫沫:老早都到地板了。。。凳子没你的份咯~
    沫沫 Internet Explorer 8.0 Windows XP
    2011-10-21 11:11
    @小松:到老久那里抢回来呢
    小松 Google Chrome 16.0.889.0 Windows 7
    2011-10-21 12:28
    @沫沫:抢到了吗?
  17. 6#
    老王 Google Chrome 14.0.835.202 Windows XP
    2011-10-20 14:39
    我留的怎么看不到呢?
    小松 Google Chrome 16.0.889.0 Windows 7
    2011-10-20 17:35
    @老王:插件不定期抽风,很是神奇。。。
  18. 5#
    老王 Google Chrome 14.0.835.202 Windows XP
    2011-10-20 14:28
    我觉得你直接把那个链接删掉啊,就没这些事了.
    小松 Google Chrome 16.0.889.0 Windows 7
    2011-10-20 17:34
    @老王:收了人家钱的,咱的主机费,域名费就靠这个了。。。
  19. 4#
    Mucid Firefox 7.0.1 GNU/Linux x64
    2011-10-20 14:23
    Mark一下,嘿嘿
    小松 Google Chrome 16.0.889.0 Windows 7
    2011-10-20 17:33
    @Mucid:哈哈,留着,我也留着~
  20. 3#
    林西老九 Internet Explorer 9.0 Windows 7 x64 Edition
    2011-10-20 14:00
    好像少了我一跳留言
    小松 Google Chrome 16.0.889.0 Windows 7
    2011-10-20 14:03
    @林西老九:你留了4条?
    林西老九 Internet Explorer 9.0 Windows 7 x64 Edition
    2011-10-20 15:26
    @小松:是啊,丢了一条。我刚想换个链接的,换个名称,又给我吃了一条
    小松 Google Chrome 16.0.889.0 Windows 7
    2011-10-20 17:30
    @林西老九:还有找不到了,就看到一条。。。
  21. 2#
    林西老九 Internet Explorer 9.0 Windows 7 x64 Edition
    2011-10-20 14:00
    DEMO了一下,听奇了个怪的
    小松 Google Chrome 16.0.889.0 Windows 7
    2011-10-20 14:02
    @林西老九:哪里奇怪?
    林西老九 Internet Explorer 9.0 Windows 7 x64 Edition
    2011-10-20 15:23
    @小松:因为不懂,所以奇怪
    小松 Google Chrome 16.0.889.0 Windows 7
    2011-10-20 17:30
    @林西老九:soga!~
  22. 1#
    林西老九 Internet Explorer 9.0 Windows 7 x64 Edition
    2011-10-20 13:58
    沙发吗?
    小松 Google Chrome 16.0.889.0 Windows 7
    2011-10-20 14:02
    @林西老九:哟,啥时候都用上IE9了?
    林西老九 Internet Explorer 9.0 Windows 7 x64 Edition
    2011-10-20 15:23
    @小松:有小半年了
    小松 Google Chrome 16.0.889.0 Windows 7
    2011-10-20 17:31
    @林西老九:哟,不错嘛~给力哦~记得你以前总用IE7的呢~

随机日志:

推荐日志:

说两句吧:

正在回复: 取消

sitemap