我正在开发一个项目,当用户在新的标签页或窗口中打开页面时,应用程序会表现得非常奇怪,导致应用程序崩溃。
我需要一些JavaScript代码来帮助我阻止这种情况。因此,基本上我想要屏蔽ctrl+点击、鼠标中键、shift+点击、从上下文菜单中打开新标签页/窗口;或者至少尽可能屏蔽它们。如果可能的话,我不想屏蔽右键点击,因为这永远不是解决方案。
注:我对js很陌生,所以任何帮助都将不胜感激。
我正在开发一个项目,当用户在新的标签页或窗口中打开页面时,应用程序会表现得非常奇怪,导致应用程序崩溃。
我需要一些JavaScript代码来帮助我阻止这种情况。因此,基本上我想要屏蔽ctrl+点击、鼠标中键、shift+点击、从上下文菜单中打开新标签页/窗口;或者至少尽可能屏蔽它们。如果可能的话,我不想屏蔽右键点击,因为这永远不是解决方案。
注:我对js很陌生,所以任何帮助都将不胜感激。
与其
<a href="http://stackoverflow.com">link</a>
使用
<a href="javascript:void(0);" onclick="javascript:window.location.href='http://stackoverflow.com';">link</a>
点击鼠标中键在当前标签页打开链接,右键->在新标签页中打开
会打开一个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,则链接可能会在另一个标签页/窗口中打开。
将所有<a>标签的属性替换为_self,这会强制浏览器不在新标签页中打开超链接。
2021年更新:
[...document.querySelectorAll('a')].forEach((el) => {
el.target = "_self"
});
href
是程序性地更改的。但是这个代码块可以正常工作:document.documentElement.addEventListener('click', function (event) {
if(event.ctrlKey){event.preventDefault()}
});