2016-05-18 60 views
0

我有一個Chrome擴展,當我在一個選項卡中使用它時,它完美地工作。然後我去另一個標籤,擴展仍然有效,但這是我無法理解的奇怪的事情。當我回到第一個標籤時,我點擊瀏覽器動作來顯示擴展名或關閉(如果我將其打開),則什麼都不會發生。我需要再次點擊瀏覽器動作,然後擴展才能開始工作。在瀏覽器的操作按鈕被定義我background.js的Chrome瀏覽器擴展瀏覽器操作在切換選項卡時會變得很奇怪

部分:

chrome.browserAction.onClicked.addListener(function (tab) {  
    if (page_loaded == true) { 
     chrome.tabs.query({ active: true, currentWindow: true, highlighted: true }, function (tabs) { 
      chrome.tabs.sendMessage(tabs[0].id, { greeting: "browser_action_clicked" }, function (response) { 
       if (response.found == 'N') { 
        chrome.tabs.executeScript(null, { file: "src/injection.js" }, function() { 
         chrome.tabs.executeScript(null, { file: "src/extension.js" }, function() { 
          chrome.tabs.executeScript(tab.id, { code: "$('.cheap-watcher').animate({ 'right': '0px' }, 'slow');" }, function() { 
           sidebarActive = true; 
          }); 
         }); 
        }); 
       } 
       else { 
        if (sidebarActive == true) { 
         chrome.tabs.executeScript(tab.id, { code: "$('.cheap-watcher').animate({ 'right': '-370px' }, 'slow');" }, function() { 
          sidebarActive = false; 
         }); 
        } 
        else { 
         chrome.tabs.executeScript(tab.id, { code: "$('.cheap-watcher').animate({ 'right': '0px' }, 'slow');" }, function() { 
          sidebarActive = true; 
         }); 
        } 
       } 
      }); 
     }); 
    }  
}); 

難道我寫的東西錯了嗎?還是鉻錯誤?

+0

_「其餘的功能在這裏是非語言的_」或者你這麼想。 – Xan

+0

注意:你不必查詢活動標籤,你已經從'onClicked'事件中獲得了它。 – Xan

+0

你的'page_loaded'如何改變?還有 - 你是否嘗試過[調試](https://www.youtube.com/watch?v=IP0nMv_NI1s)? – Xan

回答

0

您的sidebarActive作爲全局狀態變量存儲(與page_loaded相同)。因此,以下是您的示例:

  1. 單擊第一個選項卡上的按鈕;側欄顯示,sidebarActive設置爲true。
  2. 您對第二個選項卡做了一些處理,最終導致sidebarActive爲false - 不再反映舊選項卡的狀態。
  3. 您單擊第一個選項卡上的按鈕;由於sidebarActive爲false,因此您嘗試顯示側邊欄;然而,它已經顯示出來,所以它給人一種「沒有」的印象。
  4. 但是,現在sidebarActive實際上與該選項卡同步,因此後續點擊「工作」。

這根本不起作用,因爲狀態實際上是每個標籤。你必須要麼:

  • 保存的內容腳本,沒有後臺腳本的狀態,或
  • 保存狀態每個標籤,例如作爲由選項卡ID索引的數組:sidebarActive[tab.id]
    在這種情況下,您可能仍需要在發生選項卡更新時對陣列進行一些清理。
+0

PS跳到「是否是Chrome bug」是一個非常大膽的結論。除非你已經完全消除了這種可能性,否則默認情況下默認爲自己的錯 – Xan

相關問題