以下是我现在在后台脚本中的内容:
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if (tab.url.indexOf("developer.apple.com/reference") != -1 && tab.url.indexOf("?language=objc") == -1) {
var objcURL = tab.url + "?language=objc";
history.back();
}
});
我正确地进入if
区块,但history.back()
似乎没有做任何事情。我已经尝试了history.go(-1)
,我很肯定我在我的清单的权限中设置了“历史记录”
这是否可以通过Chrome扩展程序中的后台脚本执行此操作?
答案 0 :(得分:4)
正如Rebot先生所说,问题在于您在后台脚本中执行history.back();
而不是要返回的选项卡。一个简单的解决方法是使用chrome.tabs.executeScript在当前选项卡中运行js。因此,您需要做的就是将history.back();
替换为chrome.tabs.executeScript(null,{"code": "window.history.back()"});
此外,历史记录权限允许您读取和写入浏览器历史记录,因此您无需为此工作。但是你需要以下权限来注入代码:[ "tabs", "http://*/*", "https://*/*" ]
最后,我必须小心使用chrome.tabs.executeScript,它不比eval()好多了,但只要你不替换带变量的window.history.back();
你应该没问题。此外,如果要在当前页面以外的页面中运行代码,可以将null替换为要将代码注入的选项卡的id。可以在here找到的chrome API页面上找到更多文档。
答案 1 :(得分:1)
自Chrome版本72(于2019年1月发布)以来,tabs
API上有两种新方法,goBack()
和goForward()
。
chrome.tabs.goBack(tabId);