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月发布)以来,tabs
API、goBack()
和goForward()
上有两个新方法。
chrome.tabs.goBack(tabId);
这是我现在在后台脚本中的内容:
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 扩展程序中的后台脚本执行吗?
正如 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月发布)以来,tabs
API、goBack()
和goForward()
上有两个新方法。
chrome.tabs.goBack(tabId);