0

这是我现在有一个后台脚本:Chrome扩展程序,是否可以模拟后台脚本中的“返回”?

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),我确信我的清单权限设置了“历史记录”

这是不可能从铬扩展中的后台脚本执行的吗?

+0

我不确定在后台脚本中是否有可能,但尝试使用内容脚本将注入将加载前一页的脚本。请参阅相关的[SO帖子](http://stackoverflow.com/a/9517879/5995040),这将解释如何使用内容脚本在页面中注入代码。希望这可以帮助。 –

+0

如果您的听众事件完全没有解除,该怎么办? –

回答

3

正如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();替换你的变量应该可以。另外,如果您想在当前页面以外的页面中运行代码,则可以将空值替换为要将代码注入到的选项卡的ID。更多的文档可以在Chrome API页面找到here

+0

感谢您的完美答案。你的账户历史非常有趣..我很惊讶你回答这个老问题,但是谢谢你的时间!为我节省了很多头痛 –

相关问题