Chrome 扩展,是否可以从后台脚本模拟 "go back"?

Chrome Extension, is it possible to simulate "go back" from a background script?

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

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),我确信我在我的清单

的权限中设置了 "history"

这不可能从 chrome 扩展程序中的后台脚本执行吗?

正如 Rebot 先生所说,问题是您在后台脚本中执行 history.back(); 而不是您要返回的选项卡。一个简单的解决方法是使用 chrome.tabs.executeScript 到 运行 当前选项卡中的js。所以你需要做的就是用 chrome.tabs.executeScript(null,{"code": "window.history.back()"}); 替换 history.back(); 此外,历史权限允许你读取和写入浏览器历史记录,所以你不需要它来工作。但是,您确实需要以下权限才能注入代码:[ "tabs", "http://*/*", "https://*/*" ] 最后,我不得不说请谨慎使用 chrome.tabs.executeScript,它并不比 eval() 好多少,但只要您不替换 window.history.back(); 用一个变量你应该没问题。此外,如果您想 运行 页面中的代码而不是当前页面,您可以将 null 替换为您要将代码注入的选项卡的 ID。更多文档可以在 chrome API 页面上找到 here.

自Chrome版本72(2019年1月发布)以来,tabsAPI、goBack()goForward()上有两个新方法。

chrome.tabs.goBack(tabId);

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