0

Chrome 拡張機能を作成していますが、5 つ以上のタブを開くのに苦労しています。ここにソースコードがあります。

マニフセット.json

{
  "manifest_version": 2,

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

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

popup.html

<!doctype html>
<html>
  <head>
    <title>Testing</title>
    <style>
      body {
        min-width: 357px;
        overflow-x: hidden;
      }

    </style>
    <script src="popup.js"></script>
  </head>
  <body>
  </body>
</html>

popup.js

document.addEventListener('DOMContentLoaded', function () {
  chrome.bookmarks.getTree(function (stuff){
    traverseBookmarks(stuff[0].children[0].children);
  });
});

  function traverseBookmarks(bookmarkTreeNodes) {
    for(var i=0;i<bookmarkTreeNodes.length;i++) {
      var bookmark = document.createElement('a');

      if(bookmarkTreeNodes[i].url){
        bookmark.href = bookmarkTreeNodes[i].url;
        bookmark.target = "_blank";
      }
      else{
        (function(num) {
          bookmark.addEventListener("click", function() {
            addChildren(bookmarkTreeNodes[num].children, false );
          })})(i);
        document.body.appendChild(document.createElement("br"));
      }
      bookmark.innerHTML = bookmarkTreeNodes[i].title;
      document.body.appendChild(bookmark);
      document.body.appendChild(document.createElement("br"));

      if(bookmarkTreeNodes[i].children) {
        traverseBookmarks(bookmarkTreeNodes[i].children);
      }
    }
  }

  function addChildren(children) {
    for(var i = 0; i < children.length; i++){
      // will open each link in the current window
      chrome.tabs.create({
        url: children[i].url
      });
    }
  }

目標は、フォルダー (フォルダーを象徴するリンクのみ) をクリックして、そのフォルダー内のすべてのリンクを開くことができるようにすることです。現在、フォルダーへのリンクをクリックすると、最初の 5 が開きます。何らかの形式のログを取得するために、次のように追加しました。

var bookmark = document.createElement('a');
bookmark.innerHTML = children[i].title;
document.body.appendChild(bookmark);
document.body.appendChild(document.createElement("br"));

addChildren() 関数に。すべての子を出力します。私が直面している問題は、フォルダーをクリックすると最初の 5 つのタブしか開かれず、フォーカスがポップアップから離れて終了しないと推測することです。オンラインで他に役立つものを実際に見つけることができません

どんな助けでも大歓迎です。何か明確にする必要がある場合はお知らせください。

4

1 に答える 1

2

問題はあなたが言ったとおりだと思います。新しいタブを作成するとactive、デフォルトでポップアップがフォーカスを失い、アンロードされます。これは、2 つの方法のいずれかで修正できます。URL のリストをバックグラウンド ページに送信して、それらをすべて開くことができます。タブを開くときにバックグラウンド ページがロードされたままになるため、これは機能します。

別の、おそらくより良い修正方法は、activeプロパティを false に設定してタブを作成し、すべて開いた後にグループ内の最初のタブに切り替えることです。コード:

function addChildren(children) {
  for(var i = 0; i < children.length; i++){
    chrome.tabs.create({
      url: children[i].url,
      active: false
    });
  }
  // switch focus to first opened tab
  chrome.tabs.query({url:children[0].url},function(tabs){
    chrome.tabs.update(tabs[tabs.length-1].id,{active:true});
  });
}
于 2013-05-24T19:33:47.590 に答える