2017-02-24 17 views
3

在建設自己的Chrome擴展,它往往是非常有用的,打開一個新的瀏覽器選項卡,然後粘貼到其中:如何檢測調試擴展選項卡?

chrome-extension://xyzfegpcoexyzlibqrpmoeoodfiocgcn/popup.html 

當我這樣做,我能在我的彈出UI工作,而它曾經關閉,而無需點擊右上角的擴展圖標,彈出窗口有時會貼近我。

下面是問題:我需要我的js(由popup.html引用)來知道我是否在此調試選項卡中,或者它是否以「常規模式」運行(單擊擴展名圖標並正常運行)。我第一次嘗試這樣的:

var isDebugExtensionTab = (location.href.indexOf("chrome-extension:") == 0); 

這並不工作,因爲它始終計算爲真 - 這是在所有情況下,調試選項卡或普通模式location.href

如何檢測差異?

回答

2

使用chrome.tabs.getCurrent

獲取此腳本調用正在從製造的標籤。如果從非選項卡上下文(例如:背景頁面或彈出視圖)中調用,則可能未定義。

var isDebugExtensionTab = false; 
chrome.tabs.getCurrent(function(tab) { isDebugExtensionTab = !!tab; }); 

它是異步的,因爲所有的鉻。*可以接受的回調,因此結果將無法使用,直到目前情況下退出API方法。如果您需要立即使用該值,請在回調中執行此操作:

var isDebugExtensionTab = false; 
chrome.tabs.getCurrent(function(tab) { 
    isDebugExtensionTab = !!tab; 
    runSomeDebugFunction(); 
}); 
+0

wOxxOm,在您檢查tab是否爲空之前,您的示例不起作用。所以一旦我做到這一點,真是棒極了:'chrome.tabs.getCurrent(函數(標籤){ \t \t如果(標籤){ \t \t \t isDebugExtensionTab = TRUE; \t \t} \t});' - 請更新你的答案,我會接受它。 – HerrimanCoder

+0

有人請告訴我如何在評論中提供真正的塊代碼。可能嗎? – HerrimanCoder

+0

謝謝。在我的Chrome中,回調IS在所有情況下都會被調用,因此如果沒有空檢查,就會得到不正確的結果。我會接受你的回答。 – HerrimanCoder