如何建立一个不在“在新窗口中打开”的链接

时间:2011-08-20 04:37:37

标签: javascript jquery

当我们在任何网站链接上点击鼠标右键时,会出现一个下拉菜单。其中一个选项是“在新窗口中打开”。出于某些原因,我需要为所有站点链接禁用此可能性。有可能吗?

提前致谢。

更新

这样做的原因

站点菜单有两种类型的菜单项:普通链接到页面和虚假链接,这会导致弹出窗口显示某些信息。我有一个jquery函数,它显示了这个弹出窗口,并为链接返回false。而当用户“在新窗口中打开”一些虚假链接,页面重新加载,但弹出窗口不会出现。用户正在查看空白页面。我认为那不好:)

8 个答案:

答案 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)

禁用右键单击应该这样做...

http://www.billybear4kids.com/clipart/riteclic.htm