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