【问题标题】:How to redirect current tab's url in Chrome extension?如何在 Chrome 扩展程序中重定向当前选项卡的 url?
【发布时间】:2016-05-10 09:35:22
【问题描述】:

我正在编写一个 Chrome 扩展程序,用于在不同的搜索引擎之间切换。 manifest.json 看起来像:

{
    "browser_action": {
        "default_popup": "popup.html"
        },
    "permissions": [
        "tabs",
        "activeTab"
        ],
    "content_security_policy": "script-src 'self'; object-src 'self'",
    "content_scripts": [{
        "matches": ["*://*.baidu.com/*"],
        "js": ["content.js"]
        }]
}
  • content.js 用于获取用户搜索的关键词。
  • popup.html 包含支持的搜索引擎列表。

当用户在弹出窗口中点击搜索引擎的图标时,我需要使用用户选择的搜索引擎将当前标签重定向到一个新的 url。

现在我可以获取关键字了。 问题是:如何将当前标签页重定向到新的 url?

【问题讨论】:

  • 哪一部分有问题?您是否已经在弹出窗口中完成了关键字检测和点击处理程序?
  • 是的,我现在可以获取关键字了。但我不知道如何重定向到新网址。你知道怎么做吗?

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


【解决方案1】:

查看chrome.tabs.update,可以通过以下代码更新当前标签页的url

chrome.tabs.update({url: "http://www.baidu.com"});

考虑到您从内容脚本中获取关键字,并希望在用户单击弹出页面中的某个按钮后重定向 url,您可能需要Message Passingchrome.storage 在内容脚本和弹出页面之间共享关键字。

【讨论】:

    【解决方案2】:

    有两种可能的方法:

    A.让弹出窗口处理重定向。
    B. 让内容脚本处理重定向。

    在这两种情况下,您都需要解决 2 个问题:

    1. 在两者之间交流信息。在方法 A 中,您需要从内容脚本中获取关键字。在方法 B 中,您需要告诉内容脚本要切换到哪个引擎。

      两者都使用Messaging 解决。我建议使用 chrome.tabs.sendMessage 从弹出窗口向内容脚本发送消息(并在方法 A 中响应),因为在另一个方向上,内容脚本不知道何时发送消息(弹出窗口可能已关闭)。

    2. 实际上触发了变化。在方法 A 中,chrome.tabs.update 可以解决问题。在方法 B 中,内容脚本可以更改 window.location 以导航离开。

    【讨论】:

    • 效果很好! :-D 虽然我很困惑。为什么chrome.tabs.update 只重定向当前标签,而不是所有标签?
    • 它通常采用第一个参数tabId,但如果未提供它,则默认为当前活动选项卡。
    • 其实和tabs.sendMessage一样:默认是活动标签。
    • 这解释了很多。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 2011-06-22
    • 1970-01-01
    相关资源
    最近更新 更多