2014-06-07 33 views
0

幾年來,我使用用戶JavaScript來在頁面上放置額外的輸入按鈕和可點擊的span -elements。通常我設法做這個工作,例如修復點擊事件劫持事件處理

 span = document.createElement("span"); 
     span.onclick = __oujs.onClickAddPage; 
     span.appendChild(document.createTextNode("Add page")); 
     containingDiv.appendChild(span); 

通常當我點擊該span - 元素__oujs.onClickAddPage()被調用。

但是,昨天一個網站做了一些改變(顯然我不知道他們是什麼),導致點擊我的元素不會導致任何事件。在上面的例子中,__oujs.onClickAddPage()不再被調用。 input - 「按鈕」類型的元素也是如此。

當我使用Opera時,DragonFly顯示我的span仍然是該特定區域中最頂層的元素,因此它應該處理點擊事件。然而,我明白他們包含jQuery,這可能是痛苦的一部分。

是否有一種特殊的技術(可能帶有Google知道的名稱)他們用來做這種事情?我如何獲得控制權並讓我的代碼再次被調用?我可以刪除一些對象嗎?

我很抱歉以相當廣泛的風格問,但我不知道我可以尋找什麼來解決這個問題。請問你是否需要知道一些事情。

+1

在JavaScript控制檯中有任何錯誤嗎? 通常,您可以檢查頁面的腳本以查看發生了什麼並調試__oujs.onClickAddPage方法調用。 –

+0

@Mr_Mig正如我所說的,函數不再被調用,沒有什麼我可以調試的。並且在控制檯中沒有錯誤。 – sjngm

+0

'__oujs.onClickAddPage'是來自網站腳本的方法嗎?你可以用'console.log'這個方法檢查它是否被定義和訪問嗎? –

回答

0

不了這一關我的懸而未決的問題我回答這個問題我自己,而不是等待它被關閉:

對不起,是我的錯。我不得不在所有受影響的網站的其他用戶的JavaScript文件一個愚蠢的錯誤......

我重新安裝了瀏覽器,並在想着重新安裝我的操作系統,但幸運的是,這是沒有必要的。

0

我建議你這樣的步驟:

  1. 創建下一個功能:

    function stubFn(event){ 
        console.log('event caught', event); // this will log the click event 
        __oujs.onClickAddPage.call(event.currentTarget, event); // emulate the onclick behavior 
    } 
    
  2. 使用span.addEventListener('click', stubFn)的監聽器添加的元素在你的代碼。

如果不起作用,那麼您必須對腳本和標記進行逆向工程。

我建議檢查是否有任何與absolutefixed位置重疊的元素。它可以防止事件傳播

通常,沒有辦法禁止用戶腳本中的元素使用內聯處理程序處理事件。

+0

不好,抱歉,沒有工作,'stubFn()'沒有被調用。正如我在我的問題中列出的,我的項目似乎處於頂端。我明白他們不能禁止我的代碼,但也許他們可以捕獲/重定向/陷阱/劫持/ ......內部事件處理等等。 – sjngm

+0

據我所知他們不能劫持內聯事件偵聽器。他們可以劫持事件構造函數本身,但是這個想法需要徹底的逆向工程。 如果我是你,我會使用chrome開發工具和一些啤酒來深入調試和逆向工程他們的腳本。 順便說一句,你可以使用谷歌緩存嘗試使用舊腳本獲取他們的舊網站,並與新的腳本進行比較,以查看發生了什麼變化。 –