-1

我正在使用Chrome擴展,此擴展在瀏覽器操作中有2個圖標(關於&關閉);使用chrome.tabs.executeScript(tab.id,{file:"script.js",function(){});打開和關閉Chrome擴展

我有問題將其關閉 : 基本上當它在後臺執行的script.js(的script.js注入文件)! 我試圖使用background.js和script.js之間的消息通信,但這也不起作用。

+0

你什麼意思通過打開它,並把它關掉多少?你想讓按鈕完全禁用擴展嗎?您不能這樣做,並且顯示「開」按鈕 - 禁用該擴展將禁用該擴展,包括「開」按鈕。 –

+0

當它關閉時,腳本將無法與選項卡交互。 – user2997816

+1

您將需要提供更多信息。 「我遇到了問題」是不夠的 - 人們需要看到一些代碼,而且你需要解釋你所嘗試的,或者他們無法幫助你。 –

回答

2

如果我理解正確,你的擴展應該有兩個狀態,On和Off。點擊分機圖標可以開啓/關閉。

在這種情況下,這樣的擴展知道它處於什麼狀態,你應該使用存儲,以便於click事件,使用類似:

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.storage.sync.get('state', function(data) { 
     if (data.state === 'on') { 
     chrome.storage.sync.set({state: 'off'}); 
     //do something, removing the script or whatever 
     } else { 
     chrome.storage.sync.set({state: 'on'}); 
     //inject your script 
     } 
    }); 
    }); 

不過請注意,這在擴展/瀏覽器層面正在發生的事情並且將應用於所有標籤,因此您可能需要更復雜的內容來記錄標籤ID和狀態。

然後,您可以選擇始終運行內容腳本,並在執行某些操作或注入並刪除腳本之前檢查開/關狀態。我不確定你是否刪除了一個腳本。根據腳本的作用,您可能只想刷新頁面(即,如果腳本使用DOM混亂,並且想在關閉擴展時撤消該腳本)。

1

background.js

var enable=false; 
chrome.browserAction.onClicked.addListener(function (tab) { 
enable = enable ? false : true; 
if(enable){ 
    //turn on... 
    chrome.browserAction.setIcon({ path: 'icon.png' }); 
    chrome.browserAction.setBadgeText({ text: 'ON' }); 
    chrome.tabs.executeScript(null, { file: 'content.js' }); 
}else{ 
    //turn off... 
    chrome.browserAction.setIcon({ path: 'disable.png'}); 
    chrome.browserAction.setBadgeText({ text: '' }); 
} 
}); 
+0

公平警告:使用'persistent:false'事件頁面時會失敗 – Xan