2016-05-07 29 views
2

私は新しいタブでURLを開く必要があり、その後何かをする私の最初のクロムエクステンションを書いています。ポップアップでchrome.tabs.createのコールバックがトリガされませんか?

マニフェスト:

{ 
    "manifest_version": 2, 

    "name": "Test", 
    "description": "", 
    "version": "1.0", 

    "browser_action": { 
    "default_icon": "icon.png", 
    "default_popup": "popup.html" 
    }, 
    "permissions": [ 
    "tabs", 
    "activeTab" 
    ] 
} 

script.js:

function toggle() { 
     chrome.tabs.create({ url: "http://google.com" }, function(tab) { 
     alert("Hello!"); 
     }); 
} 

document.getElementById('toggle').addEventListener('click', toggle); 

がpopup.html:

<html> 
    <head> 
    </head> 
    <body> 
    <div id="toggle" class="clickable">START</div> 
    <script type="text/javascript" src="script.js"></script> 
    </body> 
</html> 

問題ですURLを開いた後は何も起こりません。何が問題なの?

+0

タブの作成後にポップアップを閉じましたか? –

+0

@RobWはい、それは閉鎖しています –

+1

あなたはなぜスクリプトが実行を停止したのに驚いていますか?スクリプトを実行し続けるには、バックグラウンドページからスクリプトを実行します。 –

答えて

3

新しいタブを作成すると、デフォルトでフォーカスが開き、ポップアップが閉じます。ポップアップが閉じると、そのJavaScriptコンテキストが破棄され、コールバックするコールバックはありません。 background/event page

  1. 移動ロジック、ポップアップが閉じた状態で存続します:

    あなたは、2つのオプションがあります。たとえば、ポップアップからタブを開く代わりに、messageのバックグラウンドページを使用して実行できます。あなたが焦点の合っていないタブを開きたい

  2. Specify

    chrome.tabs.create(
        { 
        url: "http://google.com", 
        active: false 
        }, function(tab) { 
        /* ... */ 
        } 
    ); 
    

    しかし、これは単にタブにフォーカスがないために発生しません - Chromeは(バックグラウンドで開く)それに切り替わりません。あなたがしたいことではないかもしれません。他の操作が完了した後で、chrome.tabs.updateと設定してactive: trueに切り替えることができます。

ポップアップがフォーカス損失を生き残る方法はないことに注意してください。これは設計によるものです。

+0

ロブ氏のコメントは、どこにあるのか信じています。これはちょっと詳しく説明しています。 – Xan

関連する問題