Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 防止在新选项卡/窗口中打开页面_Javascript - Fatal编程技术网

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

Javascript 防止在新选项卡/窗口中打开页面,javascript,Javascript,我正在处理一个项目,当用户在新选项卡或新窗口中打开页面时,该项目的行为非常奇怪,导致应用程序崩溃 我需要一些javascript,可以帮助我防止这种情况。所以基本上我想阻止ctrl+click,鼠标中键,shift+click,从上下文菜单中打开一个新的选项卡/窗口;或者至少尽可能多地封锁。我不想阻止右ckick(如果可能的话),因为这永远不是一个解决方案 注意:我对js非常陌生,因此非常感谢您的帮助。而不是 <a href="http://stackoverflow.com">li

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

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

注意:我对js非常陌生,因此非常感谢您的帮助。

而不是

<a href="http://stackoverflow.com">link</a>
使用
代替


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

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);
}

这样链接保持不变,但如果用户禁用了JavaScript,链接可能会在另一个选项卡/窗口中打开。

将所有标签属性替换为_self,这将迫使浏览器在新选项卡中打开超链接

2021年更新:

[...document.querySelectorAll('a')].map((el) => {
            el.target = "_self"
    });

对我来说,其他答案是不明智的选择,因为我文档中的一些
href
s是按程序更改的。这段代码的工作原理如下:

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

我认为这不是一个可能的解决办法。将页面添加到书签,然后在新选项卡中打开页面,怎么样。我认为您需要解决页面上导致崩溃的潜在问题。可能有一些方法可以防止崩溃,但它不可能完美,也不可能与每个浏览器或设置兼容。您是否可以包含行为不正常的代码或链接到演示?从长远来看,修复崩溃可能是一个更好的主意。正如我所说,我不希望有一个解决方案能够阻止在新选项卡/窗口中打开页面的所有方式;尽可能多。修复崩溃并不是那么简单,因为打开一个新的选项卡/窗口并在该页面上执行操作可以从会话中删除或修改内容。当用户试图从原始页面访问它们时,它们丢失了/不是预期的内容。最后一个脚本似乎工作得很好!谢谢你,好心的先生!
[...document.querySelectorAll('a')].map((el) => {
            el.target = "_self"
    });
document.documentElement.addEventListener('click', function (event) {
  if(event.ctrlKey){event.preventDefault()}
});