似乎是挺无聊的一个功能,阻止用户使用Shift+Click超级链接打开新的页面。不过既然有这样的bt需求,我就简单设计了一个解决方案。虽然是能解决大部分问题,不过遇到复制链接再在别的browser中去打开就没有好的阻止办法了。
解决方法分为两步,一是积极阻止,一是消极阻止。积极阻止就是在<a>上面下功夫,也就是禁止掉<a>元素的默认事件,换以手动的页面跳转。代码即示例如下:
1、
<
a
href
="http://www.google.com/"
onclick
="window.location = this.href; return false;"
>
navigate to google </ a >
2、 < a href ="http://www.google.com/" target ="_blank" onclick ="window.location = this.href; return false;" >
navigate to googl (_black) </ a >
navigate to google </ a >
2、 < a href ="http://www.google.com/" target ="_blank" onclick ="window.location = this.href; return false;" >
navigate to googl (_black) </ a >
积极阻止的关键是用"return false" cancel了<a>元素的默认navigation事件。
消极阻止新页面开启的方法,就是在被导航页面中加入如下脚本(要放在<body>之后):
<
script
language
="javascript"
>
document.body.onload = dummy;
function dummy()
{
if ( window.history.length == 0 )
{
window.close();
}
}
</ script >
document.body.onload = dummy;
function dummy()
{
if ( window.history.length == 0 )
{
window.close();
}
}
</ script >
因为这个方法需要先开启了新窗口,再做判断,所以叫消极阻止。同时还有一个问题,如果用户复制了链接到新的browser中访问,如果该browser是新开起的进程,由于window.history.length仍然是0,也可以起到一定的阻止作用。不过这个方法始终很消极,并且不能保证一定成功。
但是毕竟这种功能都只是为了限制90%以上的普通用户,而不是针对熟悉Web开发的人,所以这样看来这种防止力度似乎还是可用了。
本文转自博客园鸟食轩的博客,原文链接:http://www.cnblogs.com/birdshome/,如需转载请自行联系原博主。