4

検索バーの近くにある拡張ボタンをクリックして新しいウィンドウを開きます。 新しいウィンドウが開いていない場合にのみ開きます。その場合、私は古いものを表示することを好むでしょう。Google Chrome拡張機能:1回限りのウィンドウを作成

ここに私のコードですが、動作しません。

var v = null; 
    var vid = null; 
    chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.windows.getAll({}, function(list) { 
     // check if already exists 
     for(window in window_list) 
     if(window.id == vid) { window.focus(); return; } 

     chrome.windows.getCurrent(function(w) { 
     v = chrome.windows.create({'url': 'my_url', 'type': 'panel', 'focused': true}); 
     vid = w.id; 
     }); 
    }); 
    }); 

誰かが私にそれを修正する方法を説明できますか?

vvidの値は、アプリケーション終了後(スクリプトの実行が終了した後)に削除されますが、どうすれば修正できますか?可能であれば、localStorageまたはcookieを使用しないでください。

ウィンドウの作成中にtabIdプロパティを指定しようとしましたが、動作しません。 また、chrome.windows.onRemoved.addListener機能を使用しようとしましたが、機能しません。

答えて

5
  1. 変数名に変更しwindow
  2. 変数名が一致するようにします。 window_listlistは異なるものです。
  3. window.focus()の代わりにchrome.windows.updateを使用します。これは後者が機能しないためです。
  4. chrome.windows.getを使用すると、ウィンドウのリストを維持する代わりに、ウィンドウが存在するかどうかを確認できます。
  5. 新しいウィンドウの詳細は、chrome.windows.createというコールバックで入手できます。正しい方法で、この方法を使用します:

コード:

chrome.windows.get(vid, function(chromeWindow) { 
    if (!chrome.runtime.lastError && chromeWindow) { 
     chrome.windows.update(vid, {focused: true}); 
     return; 
    } 
    chrome.windows.create(
     {'url': 'my_url', 'type': 'panel', 'focused': true}, 
     function(chromeWindow) { 
      vid = chromeWindow.id; 
     } 
    ); 
}); 

または、代わりにウィンドウが存在するかどうかをチェックするだけのウィンドウを更新し、そして時にエラーが発生し、新しいものを開きます。

chrome.windows.update(vid, {focused: true}, function() { 
    if (chrome.runtime.lastError) { 
     chrome.windows.create(
      {'url': 'my_url', 'type': 'panel', 'focused': true}, 
      function(chromeWindow) { 
       vid = chromeWindow.id; 
      }); 
    } 
}); 
+0

Tのために働く代替コードですハンクス。私は試しましたが、うまくいきません... – auino

+0

@auinoあなたのコード全体が壊れていて、私の答えが更新され、 "// Rest of code" –

+0

ねえ。私はそこに1つのバグを持っています。 for(for)の代わりにsimple forループを使用します。インデックス番号をidとすることがあります。 for(j = 0; j

-1
chrome.windows.getAll({}, function(window_list) { 
    var extWindow = ''; 
    window_list.forEach(function(chromeWindow) { 
     //Check windows by type 
     if (chromeWindow.type == 'panel') { 
      extWindow = chromeWindow.id; 
      //Update opened window 
      chrome.windows.update(extWindow, {focused: true}); 
      return; 
     } 
    }); 

    if (extWindow == '') { 
     //Open window 
     chrome.windows.create(
      { 
       'url'  : 'my_url', 
       'type'  : 'panel', 
       'focused' : true 
      }, 
      function(chromeWindow) { 
       extWindow = chromeWindow.id; 
      } 
     ); 
    } 
}); 

それは私

+0

この修正についてのより良い説明がありますか? – Necreaux

+0

質問に「間違った」コードとは異なるコードを説明するのが最善です。たった2つのコメントだけでは不十分です。特に既に非常に似通った答えがあるので、あなたの違いは何ですか?しかし、私はdownvoteに同意しない - それは無駄ではない。 – Xan

+0

実際、私は再考するかもしれません。特定の実験的フラグが設定されていない限り、私はこのように開いたウィンドウは型パネルを保持しているとは思わない。 – Xan

関連する問題