Chrome扩展程序,是否可以从后台脚本模拟“返回”?

时间:2016-11-30 16:17:12

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

以下是我现在在后台脚本中的内容:

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扩展程序中的后台脚本执行此操作?

2 个答案:

答案 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);

https://developer.chrome.com/extensions/tabs#method-goBack