防止在新标签/窗口中打开页面

时间:2015-07-17 09:03:52

标签: javascript

我正在开发一个项目,当用户在新标签页或新窗口中打开页面时,该行为会非常奇怪,从而导致应用程序崩溃。

我需要一些可以帮助我防止这种情况的JavaScript。所以基本上我想阻止ctrl + click,鼠标中键,shift + click,从上下文菜单中打开一个新的选项卡/窗口;或至少阻止尽可能多的。我不想阻止正确的ckick(如果可能的话),因为这绝不是一个解决方案。

N.B。:我对js很新,所以非常感谢任何帮助。

3 个答案:

答案 0 :(得分:10)

而不是

<a href="http://stackoverflow.com">link</a>

使用

<a href="javascript:void(0);" onclick="javascript:window.location.href='http://stackoverflow.com';">link</a>

鼠标中键在同一个标​​签页中打开此位置,right click -> open in new tab打开about:blank页。

如果您无法手动编辑每个链接,则可以使用此脚本:

for(var els = document.getElementsByTagName('a'), i = els.length; i--;){
    els[i].href = 'javascript:void(0);';
    els[i].onclick = (function(el){
        return function(){
            window.location.href = el.getAttribute('data-href');
        };
    })(els[i]);
}

而不是<a href="...">使用<a data-href="...">

更进一步,您可以将上面的脚本更改为以下内容:

for(var els = document.getElementsByTagName('a'), i = els.length; i--;){
    var href = els[i].href;
    els[i].href = 'javascript:void(0);';
    els[i].onclick = (function(el, href){
        return function(){
            window.location.href = href;
        };
    })(els[i], href);
}

这样链接保持不变<a href="...">,但如果用户禁用了JavaScript,则可以在另一个标签/窗口中打开链接。

答案 1 :(得分:1)

Array.prototype.forEach.call(document.getElementsByTagName('a'), function(el, i){
if(el.target=="_blank"){ el.target="_self" }
});

答案 2 :(得分:0)

对我来说,其他答案不是明智的选择,因为我的文档中的某些 href 被程序更改。这段代码虽然有效:

document.documentElement.addEventListener('click', function (event) {
  if(event.ctrlKey){event.preventDefault()}
});