如何通过扩展名修改Chrome中的当前网址位置

时间:2009-12-12 00:27:05

标签: javascript google-chrome google-chrome-extension

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

是否可以使用活动标签将用户重定向到其他网站?

我试过这样的事情:

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
});

3 个答案:

答案 0 :(得分:64)

chrome.tabs API,您可以使用getCurrent()query()

我更喜欢getCurrent,但无法从非标签上下文(例如后台页面或弹出视图)调用它。如果这对您来说是个问题,则应该使用query代替。 Jean-Marc Amon的answer提供了一个很好的例子,说明如何在这种情况下获得活动标签(不要忘记向他投票!)。

获得当前标签后,只需传递update()

chrome.tabs.getCurrent(function (tab) {
  //Your code below...
  var tabUrl = encodeURIComponent(tab.url);
  var tabTitle = encodeURIComponent(tab.title);
  var myNewUrl = "https://www.mipanga.com/Content/Submit?url=" + tabUrl + "&title=" + tabTitle;

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

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

"permissions": [
  "tabs"
],

答案 1 :(得分:33)

您也可以使用chrome.tabs.query

chrome.tabs.query({currentWindow: true, active: true}, function (tab) {
      chrome.tabs.update(tab.id, {url: your_new_url});
});

答案 2 :(得分:6)

如果没有传递标签ID,chrome.tabs.update方法(至少自2017年1月起)将自动在当前活动标签上运行。

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

更改当前标签的URL就像写这个一样简单:

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

或者如评论中提到的那样,你不需要提出两个论点。

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