Javascript 如何检测在浏览器中复制链接?

Javascript 如何检测在浏览器中复制链接?,javascript,browser,event-handling,activex,copy,Javascript,Browser,Event Handling,Activex,Copy,昨天我和一位出租车司机聊天,当提到我是一名程序员时,他告诉我几天前他经历了以下事情:在试图从他的浏览器的地址栏复制URL时,出现了一个消息框,上面有这样一条消息:“请不要复制此链接,而是注册” 我不是一名web开发人员,因此这可能是一个蹩脚的问题:-)但我想知道这样的事情是如何完成的?是什么技术或语言让人能够对浏览器中的事件进行如此程度的控制 据我所知,该网站是某种电影下载服务。我没有问他使用什么浏览器,但他的平台是WinXP,所以很可能是IE。由于我不知道实现此功能的技术,我无法添加任何特定于

昨天我和一位出租车司机聊天,当提到我是一名程序员时,他告诉我几天前他经历了以下事情:在试图从他的浏览器的地址栏复制URL时,出现了一个消息框,上面有这样一条消息:“请不要复制此链接,而是注册”

我不是一名web开发人员,因此这可能是一个蹩脚的问题:-)但我想知道这样的事情是如何完成的?是什么技术或语言让人能够对浏览器中的事件进行如此程度的控制

据我所知,该网站是某种电影下载服务。我没有问他使用什么浏览器,但他的平台是WinXP,所以很可能是IE。由于我不知道实现此功能的技术,我无法添加任何特定于技术的标记,但如果您知道合适的标记,请随意添加

免责声明:-) 在阅读答案后,大多数人似乎都一致认为

  • 在浏览器页面上很容易实现,但是
  • 如果可能的话,地址栏上没有

我特别要求对方确认他的意思是从地址栏复制URL,他确认了这一点。然而,这可能仍然是双方的误解。我还没有看到事件发生,所以我只能重复我听到的描述。

我看到一些网站在页面上的任何位置禁用右键单击事件,其消息与您的类似

请不要复制此链接,而是注册


我想这是使用javascript完成的。也许通过IE,您可以使用ActiveX控件,让开发人员对浏览器有更多的控制。

地址栏-不,不可能,如果浏览器允许页面截取地址栏,那么它将引发很多安全问题

很可能是页面阻止右键单击链接,或者在页面本身中执行CTRL+C操作


如果是IE,则可能是他们在访问网站时无意中安装了ActiveX控件,可能会阻止他们从地址栏复制链接。

其中一个是
右键单击事件。这很容易抓住并做出反应

还有更通用的
contextmenu
事件,但它不适用于IE以外的浏览器

我猜他们只是阻止了右键点击链接,基于这样的假设:除了复制链接之外,没有人会因为任何其他原因右键点击链接。因此,他甚至没有从上下文菜单中选择“复制链接”,消息立即出现

有一些基于键盘的方法可以打开上下文菜单,我希望它们仍然可以工作

此行为的最简单jQuery实现是一个三行程序:

$("a").rightclick(function () {
  alert("Please don't copy our links!"); return false;
});

至于“防止从地址栏复制”-没有办法。他们不可能做到这一点

这在IE7和旧版本的Flash 10中曾经是可能的

在IE7(我认为是IE8)中,您可以简单地:

var vulnerability = window.clipboardData.getData("Text");
这是一个漏洞,在IE9中默认情况下是不允许的。在Firefox中,默认情况下也不允许挂接到剪贴板界面。在Safari/Chrome中也不允许这样做,除非在
onPaste
处理程序中明确允许这样做

在Flash中,您只需在几个月前执行剪贴板.getData()
。剪贴板现在在Flash中只有写访问权限(但在空中仍然保留它的全部功能)

在IE中,您可以看到这样做是多么微不足道。只需每隔几秒钟调用
window.clipboardData.getData(“Text”)
。有了Flash,就不会那么难了。只需将Javascript函数挂接到Flash视频中并循环视频即可


目前,在所有主要浏览器上都不可能以上述特殊方式访问剪贴板。

我尝试了
函数a(e){alert('a');}addEventListener('keydown',a,false)
只有当你在窗口中按CTRL键时才会触发,而不是当地址栏被选中时(至少在google chrome中是这样)。我添加JS标签可能有点太草率了。你当然可以在页面上捕获Ctrl+C,但是当地址栏被聚焦时,Chrome和Firefox都不允许你这样做。正如@skajfes提到的,这有可能是ActiveX或其他东西。