Javascript Socket.io+;音差

Javascript Socket.io+;音差,javascript,node.js,cordova,socket.io,Javascript,Node.js,Cordova,Socket.io,当我尝试与一起使用时,会出现以下错误: (在应支持socket.io的iOS上) 访问控制允许原点不允许原点为null 这是因为我的应用程序是通过文件://协议提供的。我能做些什么来避开这件事 谢谢 使用PhoneGap使用文件://协议打开网页 使用file://protocol时,WebSocket连接未设置原点,因此如果服务器未将Access Control Allow origin头设置为响应启用,浏览器将引发该安全异常 考虑使用一些PhoneGap插件,如下面所示,它使用本机代码来处理

当我尝试与一起使用时,会出现以下错误:

(在应支持socket.io的iOS上)

访问控制允许原点不允许原点为null

这是因为我的应用程序是通过
文件://
协议提供的。我能做些什么来避开这件事


谢谢

使用PhoneGap使用文件://协议打开网页

使用file://protocol时,WebSocket连接未设置原点,因此如果服务器未将Access Control Allow origin头设置为响应启用,浏览器将引发该安全异常

考虑使用一些PhoneGap插件,如下面所示,它使用本机代码来处理连接,但在WebView中启用(希望是标准兼容的)WebSocket API

安卓:

iPhone:


这些插件只是我发现的第一个插件,不确定它们在多大程度上是积极开发和稳定的

,因此,如果在PhoneGap中使用file://url协议打开的网页发送标题“Access Control Allow Origin:*”——理论上它应该与socket.io一起工作


(可以通过NSURLProtocol执行此操作,但我不想在不知道修复方法的情况下进入这个兔子洞)

您必须将socketio主机添加到PhoneGap.plist中的“ExternalHosts”键中

见:

不加载指向外部主机的链接和从外部主机导入的文件

A.最新代码具有新的白名单功能。如果您正在引用外部主机, 您必须在PhoneGap.plist中的“ExternalHosts”键下添加主机。通配符可以。 因此,如果要连接到“”,则必须将“phonegap.com”添加到列表中(或使用通配符“*.phonegap.com” 也将匹配子域)。(注意:如果您打开plist 在Xcode中,您不需要修改XML语法。)

对于android,您必须编辑cordova.xml并添加对socketio主机的访问:

<access origin="HOST*"/> 


必须用socket.io服务器的主机名替换的主机

这只是安卓系统吗?我正在为iOS构建,没有cordova.xml,只有cordova.plist。你在iOS上做过吗?谢谢是(cordova.xml仅适用于android)。对于iOS,您必须将主机放在PhoneGap.plist(请参阅)中。将主机添加到白名单对于设置起始点没有任何作用,这就是问题所在。下面的Shazron(创建PhoneGap的人)有一个正确的想法,我只是不知道怎么做。对于android和iOS,我都是使用cordova的白名单插件实现的。
...
<script src="HOST/socket.io/socket.io.js"></script>
<script>
    var socket = io.connect('HOST');
    socket.on('news', function (data) {
        socket.emit('my other event', { my: 'data' });
    });
</script>
...
var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {

socket.emit('news', { hello: 'world' });
    socket.on('my other event', function (data) {
        console.log(data);
    });
});