在Facebook桌面网站上使用信使时,他们似乎会在您点击或复制聊天时更改聊天中的所有外发链接。
他们改变的链接是这样的: 的 http://www.facebook.com/l.php?u=http%3A%2F%2Fstore.steampowered.com%2
(例如,此原始链接为http://store.steampowered.com/)
然而,当通过将链接悬停在链接上来预览链接时,它会显示原始链接。
这怎么可能?
答案 0 :(得分:0)
这样做的原因当然是跟踪传出的点击次数。解决方案很简单,很狡猾。就个人而言,我觉得这在道德上有点可疑。悬停时的链接预览确实会显示原始链接,因此您可能很乐意复制链接,认为您可以将其粘贴到其他地方并拥有原始链接,但您可以获得Facebook版本。
也许这是浏览器不应该允许的内容?
无论如何,这可以通过简单的JavaScript解决。
如果发生点击,您将链接交换为新链接并让事件无阻碍地通过,因此在您导航到链接之前链接已更改。
在完成事件监听器的结束之前,您设置一个具有合理值的超时功能 - Facebook使用100毫秒。这会重置原始链接。
在这里,你要监听一个mousedown事件并检查event.button == 2
(鼠标右键)。触发后,像上面那样交换链接,但不要设置超时。
相反,您会侦听mouseout,并在该事件中将链接重置为原始值。
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/