2012-01-06 43 views
1

可以说,我在当前网页上有很多锚链接,其中一些链接指向一些不同的域。移出当前域名

所以我想要的是在移动到不同的域之前向用户显示弹出消息类型的东西。

解决方案1:页面加载后,我们可以将点击事件绑定到每个锚链接,当用户点击任何链接时,我们可以检查外部链接并显示消息。

Q1。有没有比解决方案1更好的其他优化方法? Q2302。如何检查将你带出当前域的链接/指向不同于当前域的域?

谢谢, 债券。

+0

你可以像FB一样做 - 每个链接导致另一个网站被重定向 - fb.com?redirect = somelink或类似的东西。 – Bakudan 2012-01-06 13:39:59

回答

0

是否有其他优于方案1的优化方法?

将单个事件绑定到文档并检查点击目标。这就是所谓的event delegation

如何检查网络连接是否带你走出目前的DOI的

检查被点击

+0

谢谢昆汀! 我尝试了用下面的代码片段检查相同: 的$(document).bind( '点击',函数(事件){ 警报(event.target); }); 如果我在文档上附上上面的绑定事件,以前的绑定事件是否会起作用。 我问上述问题,因为该网站已经到位,我们有很多jQuery代码写入这些链接。对于一些我们确实有href =“javascript:void(0)”的链接,并且在绑定事件处理中,我们正在设置href thro jquery代码。 – 2012-01-06 14:46:49

+0

@Mr债券如果你不停止'事件'传播,点击'事件'最终会冒泡到'文档'级别:所以,是的,它会结合使用。 – FK82 2012-01-08 10:23:46

0

迭代的锚链接的href财产并过滤掉那些包含主机部分的属性,例如使用正则表达式:

var r, l, i, n, o, a ; 
    r = /(?:(http|https):\/\/)?([^\/]+)?(?:\/(.+))?/ ; 
    l = document.getElementsByTagName("a") ; 
    for(i = 0, n = l.length ; i < n ; i++) { 
     o = l[i] ; 
     if(!! (s = o.getAttribute("href"))) { 
      a = r.exec(s) ; 
      if(!! a[2]) //.. add your handlers to the A element 
     } 
    } 

相对URL,即那些不指定主机不会离开当前主机。

然后,您可以添加一个确认的对话,以链接的点击处理程序来远程主机:

//.. 
    function(href) { 
     if(confirm("You are about to leave this website.\n\nAre you sure you want to continue?")) window.location.assign(href) ; 
    } 

哪里hrefA元素的href属性的值点击。


我个人不暗示监控每个一位点击Event提出的解决方案达成一致。通常,您的页面生命周期中会有更多的点击Events,这并不意味着需要参与。换句话说,这会造成不必要的开销。