2012-06-21 95 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事件代表團,這是一個非常有用的功能,尤其是在一個交易時需要事件處理程序的大量元素集合