2017-08-16 52 views
0

我目前正在處理一個Chrome擴展,我需要阻止加載擴展的任何頁面上的默認點擊操作。通常我只會做一些這樣的下方,以防止默認動作:事件冒泡和傳播層次結構

$('.some-element').click(function(e){ 
e.preventDefault() 

// some other code 

}); 

我用同樣的方法在這裏與我的分機。但我發現是,有時這會工作,而不是其他時間。例如,如果我訪問的頁面區域中的某個<a>標籤已經有一個preventDefault綁定到的網站,那麼該網站的preventDefault將阻止我的活動運行..

層次結構如何點擊事件工作 - 是否首先加載的第一個函數會首先啓動?如果有的話,我可以對事件強加一個層次結構,這樣我的事件總是會首先觸發,從而防止在頁面上加載任何其他操作?

上已存在的需要只能暫時禁用,這樣的做法,我完全解除綁定的所有事件可能不適合,如果我不能再約束他們的頁面的動作..

感謝

+0

你是說你注入的JavaScript代碼來聽單擊事件我假設在其他人的網站的Chrome開發者控制檯?我很困惑你是如何提到你的網站和其他網站。如果你想做我認爲你想做的事,我認爲它不會起作用。 –

+0

基本上我試圖通過我通過我的內容腳本注入到頁面上的代碼來阻止任何默認的onClick事件在網站上觸發。從那裏我想用我自己的功能做幾件事情。到目前爲止,它的工作原理,但正如我所說,如果已經有一個event.preventDefault設置在網站上的一個元素上,那麼event.peventDefault會觸發,而不是我通過我的內容腳本注入頁面的event.preventDefault。我不認爲我曾經提過我的網站......它是一個擴展名爲 –

+1

在窗口上附加一個mousedown監聽器,最頂端的DOM對象,並指定true作爲addEventListener的useCapture參數在捕獲開始時截獲事件從窗口到點擊目標的階段。此代碼將在目標的mousedown之前運行。如果你在一個運行在document_start上的內容腳本中執行它,那麼任何頁面都不能取代它。 – wOxxOm

回答

0

請注意,普通的事件監聽器(Element.addEventListener)和jQuery .click/.on是兩個不同的東西。 jQuery設置監聽器一次,並有其內部的回調數組。

如果你想阻止所有某種類型的射擊聽衆,加監聽器窗口中使用拍攝模式(第三個參數):

window.addEventListener('mousedown', (e) => { 
    e.preventDefault() 
}, true); 
+0

好的,你會說這與wOxxOm的建議相結合:使用mousedown事件監聽器,而不是點擊和添加事件監聽器窗口而不是身體會增加更多的確定性上面的代碼? –

+0

@BenLiger是的,當然。完成。 – reski

+0

幾乎在那裏...修改我的代碼後,我的事件現在在之前沒有的網站上觸發。現在唯一的問題是,我的預防默認似乎不工作,即頁面上的其他功能仍與我的並行觸發。 –