50

我想创建一个扩展,如果他点击扩展按钮,将用户重定向到另一个网站。到目前为止,我只看到为每次点击创建一个新标签的扩展程序。

是否可以使用活动选项卡将用户重定向到另一个网站?

我试过这样的事情:

chrome.browserAction.onClicked.addListener(function(tab) {
    var url = "https://www.mipanga.com/Content/Submit?url="
        + encodeURIComponent(tab.url)
        + "&title=" + encodeURIComponent(tab.title);

    document.location.href = url; // <-- this does not work
});
4

3 回答 3

79

注意:如果您开发跨浏览器扩展(希望您这样做!),我建议您使用chrome.tabs.query(). 有关更多信息,请参阅Jean-Marc Amon 的回答。这个答案在 Firefox 和 Chrome 中仍然有效,但query()更常用,有更多选项,并且适用于后台页面和弹出视图。

chrome.tabsAPI 中,您可以使用getCurrent()query()update()

现在,我更喜欢这样,update()因为这允许您更新当前选项卡而无需做很多其他事情。
注意:您不能update()从内容脚本中使用。

如果需要从内容脚本更新 url,那么您应该query改用。Jean-Marc Amon 的回答提供了一个很好的例子,说明如何在这种情况下获得活动标签(不要忘记给他投票!)。

update()

let myNewUrl = `https://www.mipanga.com/Content/Submit?url=${encodeURIComponent(tab.url)}&title=${encodeURIComponent(tab.title)}`;
chrome.tabs.update(undefined, { url: myNewUrl });

在这里,我们将 update 的第一个参数设置为 undefined。这是您要更新的选项卡 ID。如果未定义,则 Chrome 将更新当前窗口中的当前选项卡。

请参阅Domino 的答案以获取更多信息,update并注意这undefined不是必需的。同样,如果您发现它有用,请不要忘记也为他们的答案投票。

getCurrent()

getCurrent也不能从非选项卡上下文(例如背景页面或弹出视图)中调用。

拥有当前选项卡后,只需传递update().

chrome.tabs.getCurrent(function (tab) {
  //Your code below...
  let myNewUrl = `https://www.mipanga.com/Content/Submit?url=${encodeURIComponent(tab.url)}&title=${encodeURIComponent(tab.title)}`;

  //Update the url here.
  chrome.tabs.update(tab.id, { url: myNewUrl });
});

注意:为了使用此功能,您必须确保您在文件中启用了tabs 权限manifest.json

"permissions": [
  "tabs"
],
于 2009-12-12T22:45:54.817 回答
45

您也可以使用 chrome.tabs.query

chrome.tabs.query({currentWindow: true, active: true}, function (tab) {
      chrome.tabs.update(tab.id, {url: your_new_url});
});
于 2015-03-19T15:19:04.950 回答
13

chrome.tabs.update如果未传递选项卡 ID,该方法将自动在当前活动选项卡上运行。

这具有不需要tabs许可的额外优势。具有此权限的扩展程序会警告用户他们可以阅读浏览历史记录,因此如果不需要,您应该避免询问。

更改当前选项卡的 URL 就像这样简单:

chrome.tabs.update(undefined, {url: 'http://example.com'});

或者正如farwayer在评论中提到的那样,您根本不需要提出两个论点。

chrome.tabs.update({url: 'http://example.com'});
于 2017-01-04T23:50:39.900 回答