由于WebExtension中的CSP,jQuery.ajax()被阻止

时间:2017-06-02 17:35:05

标签: jquery ajax firefox-addon content-security-policy firefox-webextensions

我正在开发一个Mozilla Firefox扩展,它需要在localhost:8080上与我的服务器通信。

jQuery.ajax({
        type: query_method,
        url: "http://localhost:8080/item",
        data: item,
        dataType: "jsonp",
        success: function(result) {
            return result.code;
        },
        error: function(request, status) {
            /*
             todo handle internal error
             */
            console.log(request);
            console.log(status);
        }
    });

感谢CSP,我无法将jQuery.ajax()用于GET/POST/DELETE/PUT。这一切都给了我以下错误信息:

Content Security Policy: 
The page's settings blocked the loading of a resource at
http://localhost:8080/... 
("script-src moz-extension://a79d13c4-898a-482a-9bc9-d016e8dae8f5
https://* moz-extension: blob: filesystem: 'unsafe-eval' 'unsafe-inline'").

当然,我尝试了一些所谓的解决方案,如:

  • "content_security_policy": "script-src 'self'; object-src 'self'; report-uri http://localhost:8080" - >没用?
  • "content_security_policy": "script-src 'self'; object-src 'self' http:" - > Error processing content_security_policy: SyntaxError: ‘object-src’ directive contains a forbidden http: protocol source

有人能提供真正的解决方案来发送HTTP请求并从Firefox扩展程序接收数据吗?

为什么使用jQuery.ajax()`加载资源?如果是这样,我就不能使用HTTP协议来做任何请求。

1 个答案:

答案 0 :(得分:3)

问题不在于CSP阻止了XHR,而是你正在使用jquery和jsonp。如果您allow them in the manifest,Webextensions可以执行跨源XHR,但jsonp会尝试将资源评估为<script>标记,而不是实际执行XHR。

Ditch jquery,允许清单中的localhost使用标准化的API,例如XHR或fetch()