我目前正在開發一個chrome擴展,它包含background.js和content_scripts.js。在content_scripts中,我在所有元素中添加了一些「event.preventDefault」 ,並在頁面上添加了一些元素。但是當用戶第二次點擊我的擴展時,我想「關閉」我的擴展並取消我的擴展完成的所有更改。如何在打開它後停止我的Chrome擴展?
有沒有一種簡單的方法來做到這一點,還是我必須對待我所做的所有更改?
我目前正在開發一個chrome擴展,它包含background.js和content_scripts.js。在content_scripts中,我在所有元素中添加了一些「event.preventDefault」 ,並在頁面上添加了一些元素。但是當用戶第二次點擊我的擴展時,我想「關閉」我的擴展並取消我的擴展完成的所有更改。如何在打開它後停止我的Chrome擴展?
有沒有一種簡單的方法來做到這一點,還是我必須對待我所做的所有更改?
不,沒有重新加載頁面,沒有簡單的方法一般地撤消所有的更改。是的,如果你想讓所有的改變都撤消,那麼你必須自己撤消它們。如果您的擴展功能被禁用,或者您打電話給特定的API,那麼您的更改將不會進行任何魔術記錄。
有這樣做的一些明顯的策略:
chrome.tabs.sendMessage()
輕鬆地向您的內容腳本發送一條消息,表明它應該禁用自己和/或退出任何更改。這就是我的想法。問題是我添加了一些防止默認值,所以我想實現它的最好方法是重新加載頁面。謝謝你的幫助;我會接受它作爲最佳答案。 –
@LucasMello,防止默認聽起來就像添加事件偵聽器[] addEventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener)。您可以使用['removeEventListener'](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener)刪除監聽器。我在多個擴展中執行此操作以禁用擴展的效果。 – Makyen
@LucasMello,當您需要禁用擴展/內容腳本時,記錄您添加和刪除的所有事件偵聽器是相對容易的。我在動態應用偵聽器的多種情況下(即代碼寫入時元素,事件類型等未知)都這樣做。 – Makyen
試試這個。
if(localStorage.getItem('firstClick')==='true'){
localStorage.setItem('firstClick', 'false');
chrome.tabs.executeScript(null, {file: "contentscript.js"});
}
else {
localStorage.removeItem('firstClick');
localStorage.set('firstClick', 'true')
}
這並不回答這個問題。 –
對於你給出的例子,我只是聲明一個全局標誌(例如'_active = true'),並且只有在它爲真時才執行代碼。第二次執行擴展時,只需將其切換爲false即可。 – Archer
它會阻止我的擴展運行兩次,但它不會取消擴展所做的所有事情。 –