【问题标题】:Chrome extension Background and content script posting messageChrome 扩展背景和内容脚本发布消息
【发布时间】:2016-02-18 19:04:20
【问题描述】:

我有一个包含 jquery ui 组件的 content 脚本,我想通过 http post 将数据发送到我的服务器。但是我开始意识到您不能将 http post 消息发送到 https 网站,反之亦然。如果我将消息发送到 后台脚本 并从那里发帖,我会遇到问题吗?如果网站是 httphttps 会有所不同吗?如果有影响,我该如何完成?

【问题讨论】:

    标签: javascript jquery google-chrome-extension http-post content-script


    【解决方案1】:

    是的,您可以在内容脚本以及后台脚本中使用 http POST 以及任何其他 http 方法(例如 GET、PUT、PATCH)问题。

    但是,在这两种情况下,您发送请求的 URL 都必须在您的扩展程序的权限中声明。您在清单中执行此操作。例如,如果您想向 http://www.some-domain.com 发送 http 请求,则必须将该 URL(或与该 URL 匹配的模式)添加到清单的 permissions 数组中:

    {
        ...
        "permissions": [
          "http://www.some-domain.com/*"
        ],
        "name": "Test",
        "manifest_version": 2,
        "version": "0.0.0"
    }
    

    您可以在您的 URL 权限模式中添加通配符;因此,如果您想同时匹配 https 和 http,您可以执行 *://www.some-domain.com/* 之类的操作。 See the official literature here.

    我应该警告您,如果您将内容脚本附加到作为 https 而不是 http 加载的页面,由于 Chrome 阻止混合内容,您可能不会被允许发送不安全的 http 请求,我认为这需要用户覆盖。所以一个好的经验法则是:如果您将内容脚本附加到通过 http 加载的页面,则使用 http 发送请求;如果您要附加到通过 https 加载的页面,请使用 https。

    最后一个提示:更改清单后不要忘记重新加载扩展程序,否则权限更改将不会反映。要重新加载您的扩展程序,请转到 chrome://extensions,找到您的扩展程序,然后点击重新加载。

    【讨论】:

    • 感谢非常有用的信息,但它有点像一种解决方法。我更喜欢将我的消息发送回后台并以这种方式发送发布请求,但无论如何感谢您的信息和建议!
    • 这不是解决方法;这是唯一的方法。允许您向 chrome-extension 源之外的域发送 http 请求的唯一方法是在清单中声明 URL 匹配模式,无论请求来自背景页面/脚本还是内容脚本.
    【解决方案2】:

    如果您从后台脚本发送,则切换协议没有问题,但您必须声明对这些 url 的权限:

    查看更多at the google manifest documentation 和此duplicated question

    【讨论】:

    • 这不是同一个问题。如果一个是 http 一个是 https,无论您在清单中添加什么,我似乎都无法将消息发送到我的服务器。但你说得对,我可以从后台发送它们。我现在已经尝试过了,它奏效了!谢谢
    猜你喜欢
    • 1970-01-01
    • 2014-02-04
    • 2019-11-05
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 2018-08-15
    相关资源
    最近更新 更多