2012-06-21 67 views
-1

我有一个服务器,通过将函数* file_get_contents *的结果回显到URL来加载html页面。我想在此之后获取用户点击的网址。我试过了:如何捕获点击的网址?

$result = file_get_contents('http://www.google.com/'); 

header('Content-Type: text/html; charset=iso-8859-1'); 

echo $result; 

echo '<script type="text/javascript">', 
    "Event.observe(document.body, 'click', function(event) {", 
    'alert("hi");', 
    '});</script>'; 

但我不知道为什么它不起作用!

谢谢

+3

您是否包含带有Event类的JS框架?这看起来像原型JS。如果没有包含它,它将不起作用。 –

+0

不,我没有。还有其他的方式吗? – synack

+0

是的,看TheZ的解决方案 –

回答

7

你想要一个脚本,看起来像这样:

(function() { 
    function onclick(event) { 
    event = event || window.event; 
    var target = event.target || event.srcElement; 
    if (target.tagName && target.tagName.toLowerCase() === 'a') { 
     alert(target.href); 
    } 
    } 

    if (document.body.addEventListener) { 
    document.body.addEventListener('click', onclick, false); 
    } else if (document.body.attachEvent) { 
    document.body.attachEvent('onclick', onclick); 
    } 
})(); 

这将在IE和其他浏览器,而无需使用任何JS库。

+0

+1不错的解决方案 – kapa

+1

这在IE 9之前的IE中不起作用:事件不会传递给回调函数,而是保存在全局对象中。 IE <9事件对象没有'target'属性...自我调用函数是一个很好的建议,我编辑我的答案也是这样, –

+0

谢谢你的建议,Elias。编辑。 –

0

你应该解除一个点击事件的绑定,以便你的事件开始工作。

<?php 
     $result = file_get_contents('http://www.google.com/'); 
     header('Content-Type: text/html; charset=iso-8859-1'); 
     echo $result; 

     echo '<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>'; 
     echo ' 
     <script type="text/javascript"> 
     $(document).ready(function(){ 
      $(document).unbind("click").click(function(){ alert("Hi!"); }); 
      // similarly 
      $("a").unbind("click").click(function(){ alert($(this).attr("href")); return false; }); 
     }); 
     </script>'; 
?> 
1

更容易理解,但这种方法使用JQuery,它通常包含在许多框架或cmses中。

$(function(){ 
    $('a').click(function(){ 
     alert(this.href); 
    }); 
}); 
3

一个建议,使用事件代表团:

(function() 
{ 
    function callback(e)//IE doesn't pass event object, but we'll fix that 
    { 
     var target; 
     e = e || window.event;//get IE event 
     target = e.target || e.srcElement;//IE again 
     if (target.tagName !== 'A') 
     { 
      return true; 
     } 
     //a link has been clicked, target holds a reference to that link, e is the click event 
     alert(target.href); 
     //to prevent the link to be followed: 
     if (e.preventDefault) 
     {// all major browsers, except for ie 
      e.preventDefault(); 
      e.stopPropagation(); 
      return false; 
     }//now IE again: 
     e.returnValue = false; 
     e.cancelBubble = true; 
     return false;//not required to return here 
    } 

    if (document.body.addEventListener) 
    { 
     document.body.addEventListener('click',callback,false); 
    } 
    else 
    { 
     document.body.attachEvent('onclick',callback);//for IE > 9 
    } 
})(); 

这样,你只能绑定1个事件侦听器,以1个处理器,并将其与被点击页面上的任何位置的所有链接的交易。如果你只是想阻止/处理的某些环节,你可以给他们一个不同的类,然后编辑回调函数,像这样:

if(target.tagName !== 'A') 
//add extra check: 
if (target.tagName !== 'A' && target.className !== 'handleThisLinkClass') 

谷歌JavaScript事件代表团,这是一个非常有用的功能,尤其是在一个交易时需要事件处理程序的大量元素集合