我正在开发基于Addon SDK的Firefox扩展程序。 在我的内容脚本中,我需要使用wss创建与我的localhost服务器的WebSocket连接。 在我的插件脚本(index.js)中,我使用“sdk / tabs”注入内容脚本。
var tabs = require("sdk/tabs");
tabs.on("ready", function(tab){
var worker = tab.attach({
contentScriptFile: ["./websocket.js"]
});
});
data / websocket.js看起来像:
websocket = new WebSocket("wss://localhost:8443/WebsocketServer/");
websocket.onopen = function(evt){
console.log("connection open");
websocket.send("connection established!");
};
websocket.onmessage = function(evt){
console.log("message received: "+evt.data);
};
我打开firefox并用https://localhost:8443/
打开一个页面并接受证书。所以证书在这里不会有问题。
我可以打开一个普通的http页面,这个插件工作得很好,与我的websocket服务器对话。如果我打开https://google.com
,我也可以使它工作。
但是当我打开https://www.facebook.com
或https://www.twitter.com
时,无法建立websocket连接。
当我打开开发者控制台时,我可以看到错误消息:
Content Security Policy: The page's settings blocked the loading of a
resource at wss://localhost:8443/WebsocketServer/ ("connect-src
https://graph.facebook.com https://*.giphy.com https://pay.twitter.com
https://analytics.twitter.com https://media.riffsy.com
https://upload.twitter.com https://api.mapbox.com https://twitter.com").
Content Security Policy: The page's settings blocked the loading of a
resource at wss://localhost:8443/WebsocketServer/ ("connect-src
https://*.facebook.com https://*.fbcdn.net https://*.facebook.net
https://*.spotilocal.com:* https://*.akamaihd.net wss://*.facebook.com:*
https://fb.scanandcleanlocal.com:* https://*.atlassolutions.com
https://attachment.fbsbx.com ws://localhost:* blob:").
检查后,发现facebook和twitter都在其http标头中实现了内容脚本策略: https://developer.mozilla.org/en-US/docs/Web/Security/CSP/Introducing_Content_Security_Policy
但我认为这项政策应该免除附加费。我怎么能绕过这个检查并使我的websocket连接也能在facebook和twitter上运行呢?
我发现有一个链接使用XPCOMM来hyjack http头并绕过CSP检查,但这不是我想要的,因为XPCOMM将被firefox弃用。有没有更合适的方法呢?
非常感谢!