4

私の要件に従って、1 つのクロム ウィンドウの異なるタブで 1 回のクリックで複数のリンク (25 以上) を開く Google Chrome 拡張機能を作成する必要があります。コードは Chrome 18 まで正常に動作していました。現在、Chrome 24 を使用していますが、そのコードは動作しなくなりました。すべてのリンクを配列に格納し、次のように for ループを使用して開くだけでした。

  for(var i = 0; i<links.length; i++)
  {
    var tablink = links[i];
    if(links[i] != "")
    {
            tablink = *"somedomain"* + tablink;
        setTimeout(window.open(tablink), 500);  
    }
  }  

その結果、2 つのリンクのみがタブで開かれ、残りは別の chrome ウィンドウで開かれます。これを克服するにはどうすればいいですか?

編集#1

私のマニフェストファイルで

"content_scripts": [
    {
      "matches": ["http://*/*", "https://*/*"],
      "js": ["script.js", "jquery.js", "dialog.js"]
    }
  ],


"permissions": [
    "tabs", "http://*/*", "https://*/*"
  ],

最初に指定されたコードはdialog.jsにあります

4

3 に答える 3

1

これは、JavaScript でよくあるエラーのようです。 500 ミリ秒後にsetTimeout(window.open(tablink), 500);window.openが返すものを呼び出すことを意味します。通常、window.open の戻り値は Window オブジェクトであるため、setTimeout が失敗し、コードの実行が停止します。それが問題の原因です。setTimeout(function(){window.open(tablink)}, 500);代わりに使用してください。

于 2012-11-21T07:28:25.573 に答える
-1

同時に複数のサイトを開こうとしたのですが、

「そのページのポップアップはブロックされました」

アドレスバーで確認できます。

:)

于 2012-11-20T07:19:28.133 に答える
-2

解決策を得て、n 回の試用版の岩を打ちます :)

setTimeout 関数を削除したところ、機能しました。なぜそれが問題を引き起こしたのかはまだわかりません。

for(var i = 0; i<links.length; i++)
  {
    var tablink = links[i];
    if(links[i] != "")
    {
            tablink = *"somedomain"* + tablink;
        window.open(tablink);  
    }
  }  
于 2012-11-20T11:09:46.263 に答える