2016-05-18 9 views
0

1つのタブで完全に機能するChrome拡張機能があります。それから私は別のタブに移動し、拡張機能はまだ動作しますが、ここで私が理解できない奇妙なことがあります。最初のタブに戻ってブラウザのアクションをクリックして拡張子を表示するか閉じる(私が開いたままにした場合)何も起こりません。ブラウザのアクションを2回クリックする必要があり、その後拡張機能が動作します。ブラウザのアクションボタンが定義されている私の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にある2番目のタブで何かを行うと、古いタブの状態は反映されなくなります。
  3. 最初のタブのボタンをクリックします。 sidebarActiveはfalseなので、サイドバーを表示しようとします。しかし、それはすでに示されているので、「何もしない」という印象を与えます。
  4. しかし、現在sidebarActiveは実際にはタブと同期しているので、その後のクリックは「機能する」。

状態は実際にはタブごとであるため、これはまったく機能しません。

  • 保存コンテンツスクリプトではなく、バックグラウンドスクリプトの状態、または
  • 保存状態ごとのタブ、例えば:あなたはどちらかに持っていますsidebarActive[tab.id]
    この場合、タブの更新が発生した場合でも配列のクリーンアップが必要な場合があります。
+0

PS "それはChromeのバグですか?"にジャンプすることは非常に大胆な結論です。あなたが完全にその可能性を排除しない限り、常にデフォルトであなた自身のことを自分自身とみなしてください。 – Xan

関連する問題