Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在单击/复制Facebooks Messenger聊天时更改链接?_Javascript_Facebook_Click_Copy_Href - Fatal编程技术网

Javascript 如何在单击/复制Facebooks Messenger聊天时更改链接?

Javascript 如何在单击/复制Facebooks Messenger聊天时更改链接?,javascript,facebook,click,copy,href,Javascript,Facebook,Click,Copy,Href,在Facebooks桌面站点上,当您单击或复制messenger时,他们似乎会更改聊天室中的所有传出链接 他们更改为的链接类似于: (这里的原始链接就是一个例子) 但是,当将鼠标悬停在链接上预览链接时,它会显示原始链接 这怎么可能呢?原因当然是为了跟踪传出的点击。解决办法很简单,而且相当狡猾。我个人觉得这在道德上有点可疑。悬停时的链接预览确实显示了原始链接,因此您可能很乐意复制该链接,认为您可以将其粘贴到其他地方并获得原始链接,但您得到的是Facebooks版本 也许这是浏览器不应该允许的 在

在Facebooks桌面站点上,当您单击或复制messenger时,他们似乎会更改聊天室中的所有传出链接

他们更改为的链接类似于:

(这里的原始链接就是一个例子)

但是,当将鼠标悬停在链接上预览链接时,它会显示原始链接


这怎么可能呢?

原因当然是为了跟踪传出的点击。解决办法很简单,而且相当狡猾。我个人觉得这在道德上有点可疑。悬停时的链接预览确实显示了原始链接,因此您可能很乐意复制该链接,认为您可以将其粘贴到其他地方并获得原始链接,但您得到的是Facebooks版本

也许这是浏览器不应该允许的

在任何情况下,这都可以通过简单的JavaScript解决

对于单击部分: 单击事件时,您将链接交换到新链接,并让事件不受阻碍地通过,因此在导航到链接之前,链接会发生更改

在事件监听器结束之前,您设置了一个具有合理值的超时函数-Facebook使用100毫秒。这会将链接重置为原始链接

复制部分 在这里,您将侦听mousedown事件,并检查
event.button==2
(鼠标右键)。触发时,像上面那样交换链接,但不要设置超时

而是监听mouseout,并在该事件中将链接重置回原始值

在使用jQuery的代码中,假设HTML带有锚标记: 使用相同代码的JSFIDLE演示:

var anchor = $('a');
var sneakyLink = 'http://www.altavista.com';
var prevLink = anchor[0].href;

anchor.on('click',function(e){
    anchor[0].href = sneakyLink;
    setTimeout(function(){
        anchor[0].href=prevLink;
    },100);
    return true;
});

anchor.on('mousedown',function(e){
    if(e.button == 2) {        
        anchor[0].href = sneakyLink;
    }    
});

anchor.on('mouseout',function(e){
    anchor[0].href = prevLink;
});