当我们在任何网站链接上点击鼠标右键时,会出现一个下拉菜单。其中一个选项是“在新窗口中打开”。出于某些原因,我需要为所有站点链接禁用此可能性。有可能吗?
提前致谢。
更新
站点菜单有两种类型的菜单项:普通链接到页面和虚假链接,这会导致弹出窗口显示某些信息。我有一个jquery函数,它显示了这个弹出窗口,并为链接返回false。而当用户“在新窗口中打开”一些虚假链接,页面重新加载,但弹出窗口不会出现。用户正在查看空白页面。我认为那不好:)
答案 0 :(得分:2)
不,不是在所有浏览器中,可能不在任何浏览器中。如果没有特定的浏览器允许您访问GUI,则无法更改它的GUI,因为浏览器GUI不是任何标准。
你为什么要这样做?
答案 1 :(得分:1)
据我所知,您无法禁用此选项,因为它由Web浏览器本身提供,并且每个选项都以不同方式实现该功能。但是,您可以检查HTTP标头中的referrer值并确保其值正确。当用户打开一个新窗口时,引用者应该设置为null,允许您进行干预。
我还希望您考虑不执行此操作,因为某些浏览器的行为不一致,或者网络上的设备可能会删除标题信息,导致人们无法使用您的网站。
答案 2 :(得分:1)
如果您使用的是javascript,您也可以点击链接执行javascript方法。这样在新页面中打开它什么也没做。
答案 3 :(得分:1)
这不适合网站参考,但如果您真的需要阻止从新窗口访问...
如何使用Ajax生成页面内容?
类似的东西:
HTML
<a href="#" onclick="page('Main')"></a>
<a href="#" onclick="page('Sub')"></a>
<a href="#" onclick="page('Sub')"></a>
JAVASCRIPT
function xmlhttp() {
var x;
try {
x = new ActiveXObject('Microsoft.XMLHTTP');
} catch (e) {
try {
x = new ActiveXObject('Msxml2.XMLHTTP');
} catch (e) {
try {
x = new XMLHttpRequest();
} catch (e) {
x = false;
}
}
}
return x;
}
function page(idMenu) {
var http = xmlhttp();
if (!http) {
alert('XmlHttpRequest non supporté');
} else {
var url = 'pageOutput.php?pageNo=' + idMenu;
http.open('GET', url, true);
http.onreadystatechange = function () {
if (http.readyState == 4 && http.status == 200) {
document.getElementById('pageContent').innerHTML = http.responseText;
}
}
http.send();
}
}
现在您要做的就是创建一个PHP,您可以根据$ _GET ['pageNo']检查所调用的菜单ID和echo页面内容。如果您已经在许多PHP / HTML上获得了页面,那么您也可以包含并回显它们......
if(isset($_GET['pageNo'])){
//echo page code here according to $_GET['pageNo'] value
}else{
//echo main page
}
编辑:您还可以添加URL参数来引用当前页面,以便用户可以从新窗口重新加载您的页面,而不会加载参数...
答案 4 :(得分:0)
您可以使用javascript更改网址并在点击时添加操作,以便当用户尝试在新窗口中打开它时没有任何反应
答案 5 :(得分:0)
从标记中删除HREF属性,但应用CSS样式使其看起来像所有浏览器中的链接。然后使用Javascript onclick函数来执行您想要执行的操作。简单。例证:查看此页面上的“添加评论”链接/按钮。如果右键单击它,您会注意到没有“在新窗口中打开”选项:)
答案 6 :(得分:0)
<强>更新强>
可以在我们想要的任何元素上禁用上下文菜单:
$('selector').contextmenu( function() {
return false;
});
要完全禁用页面上的上下文菜单,我们可以使用以下内容:
$('*').contextmenu( function() {
return false;
});
OLD ANSWER
好的,伙计们,如果我们无法改变浏览器的特定功能,那么我们必须考虑其他方式。至于我,Quentin提出了最合适的想法。所以我写了一个小的jquery脚本来替换所有链接,我需要伪造,带有span元素。// transform links with .fake class only
$('.nav >li > a.fake').each(function () {
// save all necessary link information
var href = $(this).attr('href');
var text = $(this).html();
// add fake span
$(this).after('<span>'+text+'</span>');
// save new span into a variable and after this we can remove the link
var mySpan = $(this).siblings('span');
$(this).remove();
// emulate link default behaviour
mySpan.click(function () {
window.location.href = href;
});
});
答案 7 :(得分:-1)
禁用右键单击应该这样做...