我想创建一个扩展程序,如果用户点击扩展程序按钮,则会将用户重定向到另一个网站。到目前为止,我只看到了为每次点击创建新标签的扩展程序。
是否可以使用活动标签将用户重定向到其他网站?
我试过这样的事情:
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
});
答案 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'});