【问题标题】:Chrome Extension, is it possible to simulate "go back" from a background script?Chrome扩展程序,是否可以从后台脚本模拟“返回”?
【发布时间】:2017-04-15 01:22:25
【问题描述】:

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

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 扩展中的后台脚本来实现吗?

【问题讨论】:

  • 我不确定是否可以在后台脚本中使用,但请尝试使用内容脚本来注入将加载前一页的脚本。请参阅相关的SO post,它解释了如何使用内容脚本在页面中注入代码。希望这会有所帮助。
  • 如果您的侦听器事件根本没有触发怎么办?

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


【解决方案1】:

正如 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。更多文档可以在 chrome API 页面找到here。

【讨论】:

  • 感谢您的完美回答。您的帐户历史非常有趣。我很惊讶您提出这个老问题,但感谢您抽出宝贵时间!帮我省了很多麻烦
  • 从 Chrome 72 开始,有一种方法可以在不执行内容脚本的情况下执行此操作:chrome.tabs.goBack(tabId)。看到这个答案:stackoverflow.com/a/55947142/855475
【解决方案2】:

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

chrome.tabs.goBack(tabId);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-18
    • 2018-04-11
    • 2017-06-12
    • 2018-04-02
    • 2011-01-10
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多