0

我正在開發一個Mozilla Firefox擴展,它需要與localhost上的服務器進行通信:8080。jQuery.ajax()由於WebExtension中的CSP而被阻止

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協議來做任何請求。

回答

3

問題不在於CSP阻止XHR,而在於您使用的是jquery和jsonp。如果您allow them in the manifest,則Webextensions可以執行跨源XHR,但jsonp會嘗試將資源評估爲<script>標記,而不是實際執行XHR。

溝渠jquery,允許本地主機在清單和使用標準化的API,如XHR或fetch()

相關問題