javascript - 防止在新选项卡/窗口中打开页面

标签 javascript

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

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

注意:我是 js 的新手,所以非常感谢任何帮助。

最佳答案

代替

<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,链接可能会在另一个选项卡/窗口中打开。

关于javascript - 防止在新选项卡/窗口中打开页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31472065/

相关文章:

javascript - 几种带有OnChange事件的表单

javascript - 如何滚动到第一个子 div,而不是一个接一个地滚动到所有目标子 div?

javascript - 如何强制javascript不使回调函数并行?

javascript - AngularJS 中如何将数据从一个异步函数传递到另一个异步函数

javascript - 如何在 VueJs 中显示数组中的单个对象?

javascript - 如何更改 `<Div>` 及其父 `<Td>` 的高度

javascript - 使用 JavaScript 写入 CRM 页脚

javascript - 需要在导航下拉菜单上强制执行容器边缘

javascript - ng-disabled 在 chrome 中不起作用

javascript - JavaScript中代码注释的正确方式是什么