我有谷歌Chrome扩展的乐趣,我只是想知道我如何在变量中存储当前选项卡的URL ?


当前回答

像这样使用chrome.tabs.query():

chrome.tabs.query({active: true, lastFocusedWindow: true}, tabs => {
    let url = tabs[0].url;
    // use `url` here inside the callback because it's asynchronous!
});

这需要你请求访问chrome。标签API在你的扩展清单:

"permissions": [ ...
   "tabs"
]

重要的是要注意,“当前选项卡”的定义可能会根据扩展的需要而有所不同。

在查询中设置lastFocusedWindow: true是合适的,当你想要访问用户聚焦窗口中的当前选项卡(通常是最上面的窗口)。

设置currentWindow: true允许你在你的扩展代码正在执行的窗口中获得当前选项卡。例如,如果您的扩展创建了一个新的窗口/弹出窗口(改变焦点),但仍然想从运行扩展的窗口访问选项卡信息,这可能是有用的。

在本例中,我选择使用lastFocusedWindow: true,因为谷歌调用了currentWindow可能不总是存在的情况。

您可以使用这里定义的任何属性进一步优化选项卡查询:chrome.tabs.query

其他回答

你得检查一下。

HTML

<button id="saveActionId"> Save </button>

manifest.json

  "permissions": [
    "activeTab",
    "tabs"
   ]

JavaScript 下面的代码将活动窗口的所有url保存为JSON对象,作为按钮单击的一部分。

var saveActionButton = document.getElementById('saveActionId');
saveActionButton.addEventListener('click', function() {
    myArray = [];
    chrome.tabs.query({"currentWindow": true},  //{"windowId": targetWindow.id, "index": tabPosition});
    function (array_of_Tabs) {  //Tab tab
        arrayLength = array_of_Tabs.length;
        //alert(arrayLength);
        for (var i = 0; i < arrayLength; i++) {
            myArray.push(array_of_Tabs[i].url);
        }
        obj = JSON.parse(JSON.stringify(myArray));
    });
}, false);

对于那些使用上下文菜单api的人来说,文档并没有立即明确如何获取选项卡信息。

  chrome.contextMenus.onClicked.addListener(function(info, tab) {
    console.log(info);
    return console.log(tab);
  });

https://developer.chrome.com/extensions/contextMenus

async function getCurrentTabUrl () {
  const tabs = await chrome.tabs.query({ active: true })
  return tabs[0].url
}

您需要在清单中添加“permissions”:["tabs"]。

像这样使用chrome.tabs.query():

chrome.tabs.query({active: true, lastFocusedWindow: true}, tabs => {
    let url = tabs[0].url;
    // use `url` here inside the callback because it's asynchronous!
});

这需要你请求访问chrome。标签API在你的扩展清单:

"permissions": [ ...
   "tabs"
]

重要的是要注意,“当前选项卡”的定义可能会根据扩展的需要而有所不同。

在查询中设置lastFocusedWindow: true是合适的,当你想要访问用户聚焦窗口中的当前选项卡(通常是最上面的窗口)。

设置currentWindow: true允许你在你的扩展代码正在执行的窗口中获得当前选项卡。例如,如果您的扩展创建了一个新的窗口/弹出窗口(改变焦点),但仍然想从运行扩展的窗口访问选项卡信息,这可能是有用的。

在本例中,我选择使用lastFocusedWindow: true,因为谷歌调用了currentWindow可能不总是存在的情况。

您可以使用这里定义的任何属性进一步优化选项卡查询:chrome.tabs.query

如果你想要存储通过chrome扩展打开或看到的使用的url的完整扩展:

在后台使用这个选项:

openOptionsPage = function (hash) {
  chrome.tabs.query({ url: options_url }, function (tabs) {
    if (tabs.length > 0) {
      chrome.tabs.update(
        tabs[0].id,
        { active: true, highlighted: true, currentWindow: true },

        function (current_tab) {
          chrome.windows.update(current_tab.windowId, { focused: true });
        }
      );
    } else {
      window.addEventListener(hash, function () {
        //url hash # has changed
        console.log(" //url hash # has changed 3");
      });
      chrome.tabs.create({
        url: hash !== undefined ? options_url + "#" + hash : options_url,
      });
    }
  });
};

你还需要index.html文件。你可以在Github上找到 清单文件应该是这样的:

{
  "manifest_version": 2,
  "name": "ind count the Open Tabs in browser ",
  "version": "0.3.2",
  "description": "Show open tabs",
  "homepage_url": "https://github.com/sylouuu/chrome-open-tabs",
  "browser_action": {},
  "content_security_policy": "script-src 'self' https://ajax.googleapis.com https://www.google-analytics.com; object-src 'self'",

  "options_page": "options.html",
  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["content.js"]
    }
  ],
  "background": {
    "scripts": ["background.js"]
  },

  "web_accessible_resources": ["img/*.png"],

  "permissions": ["tabs", "storage"]
}

完整版的简单应用程序可以在这个Github上找到:

https://github.com/Farbod29/extract-and-find-the-new-tab-from-the-browser-with-chrome-extention