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

时间:2014-06-23 12:06:13

标签: javascript facebook click copy href

在Facebook桌面网站上使用信使时,他们似乎会在您点击或复制聊天时更改聊天中的所有外发链接。

他们改变的链接是这样的: 的 http://www.facebook.com/l.php?u=http%3A%2F%2Fstore.steampowered.com%2

(例如,此原始链接为http://store.steampowered.com/

然而,当通过将链接悬停在链接上来预览链接时,它会显示原始链接。

这怎么可能?

1 个答案:

答案 0 :(得分:0)

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

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

无论如何,这可以通过简单的JavaScript解决。

对于点击部分:

如果发生点击,您将链接交换为新链接并让事件无阻碍地通过,因此在您导航到链接之前链接已更改。

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

对于复制部分

在这里,你要监听一个mousedown事件并检查event.button == 2(鼠标右键)。触发后,像上面那样交换链接,但不要设置超时。

相反,您会侦听mouseout,并在该事件中将链接重置为原始值。

在使用jQuery的代码中,假设HTML带有锚标记:

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;
});

使用相同代码的JSFiddle演示:http://jsfiddle.net/657FN/1/