如何使用jQuery捕捉在新标签页或窗口中打开的链接?

5
使用jQuery可以捕获右键单击打开新窗口/标签或鼠标滚轮打开新窗口/标签的事件吗? 更新1 这是为什么我需要它。我有一个使用pagination类的codeigniter应用程序。我使用这个类来显示网格。分页链接已经绑定了一个方法,该方法使用AJAX在容器中加载下一个页面。现在有人可以右键单击并在新窗口/标签中打开下一页,但我不想要这样。在我看来,唯一处理这个问题的方式是以某种方式捕获(右键单击或鼠标滚轮按钮单击)打开新窗口/标签的事件。 更新2 我刚意识到所有我的AJAX请求都由一个CI控制器提供服务,该控制器实际上充当其他类/库的代理。在这个控制器中,我可以查看请求,如果它不是AJAX请求,则可以将用户重定向到另一个页面。

1
我很确定答案是否定的,但是问题很好。 - nnnnnn
1
即使我不确定它是否不可能,但我想以某种方式防止它发生。我将添加为什么需要它的详细信息,希望有人可以提供另一种解决方案。 - Kumar
ARGHHH!!! 上面的注释应该被理解为“即使我确定这是不可能的”。 - Kumar
4个回答

1
一个解决方法是将所有适用的<a>元素替换为按钮,其中(显然)按钮将调用执行适当导航的JavaScript。
如果您真的很热衷,可以应用CSS使按钮看起来像<a>元素,但我不建议这样做,因为它会让用户混淆,他们可能会尝试将其视为标准链接并右键或中键单击它们。
(您甚至可以使每个按钮成为自己小表单中的提交按钮,以使未启用JavaScript的用户也能使用。)

1
我真的不想去调整分页库。这个表格只是一个例子。我找到的解决方案是在服务器端查看请求,如果它不是 AJAX 请求,则将其重定向到其他页面。 - Kumar

0

我几乎已经解决了一个类似的问题,这是我正在处理的一个页面。我的解决方法是在页面中进行一些更改,如果该页面已在新窗口中打开....

假设您从页面“A”中打开一个名为“B”的页面,并在新窗口中打开。

如果您想要检查页面“B”是否从页面“A”中以新窗口打开,请按照以下步骤进行...

If (document.referrer == "A" && window.history.length > 1) {
     alert("I am page 'B' and opened from page 'A' in a new window");
}

0

至少你可以使用.mousedown()(或者大概率是mouseup())捕获到右键点击事件。查看这个StackOverflow答案,了解更多关于右键点击的信息。通过捕获它,你应该可以做一个标准的event.preventDefault(),然后再从那里进行操作。不过这可能有些过度防护,因为它会阻止用户进行一些你希望他们能够做的其他事情。


是的,当你说这是过度设计时,你是正确的。控制上下文菜单并不是一个正确的选择。 - Kumar
我认为这可能是情况(我通常也同意上下文菜单;那是我对Flash的主要不满之一)。虽然完全有效的哲学观点不提,但考虑到您对问题的解释,我想知道在这种情况下它是否真的很重要。如果您不希望它们在新标签页中打开,您想让它们能够通过右键单击获得与该元素相关的其他功能吗?这可能并不是最理想的解决方案,但至少可以完成工作。 - Chris Krycho
知道了,我会考虑一下。但是还有许多类似的情况。 - Kumar
当然。我也希望有人能够提出另一个更好的答案来回答你的问题,因为这将是我们在思维工具箱中拥有的一件好事。 - Chris Krycho

0
如果您不希望人们以通常的方式访问链接或在禁用JS时回退,则它不应该是一个链接。只需使用任何您喜欢的元素(span、div、button等),并将其样式设置为链接。然后使用JS绑定操作。或者您可以使用带有 href="#"href="javascript: void(0)" 的链接。这样,如果用户右键单击它并选择在新窗口中打开,则他们将停留在之前的同一页。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接