web-dev-qa-db-ja.com

Socket.io + PhoneGap

Socket.IOPhoneGap とともに使用しようとすると、次のエラーが発生します。

(socket.ioをサポートする必要があるiOSの場合)

Origin nullはAccess-Control-Allow-Originでは許可されていません。

これは、私のアプリがfile://プロトコル。これを回避するにはどうすればよいですか?

ありがとう!!

22
fancy

Socketio HostをPhoneGap.plistの「ExternalHosts」キーに追加する必要があります。

FAQ を参照してください:

Q.外部ホストへのリンクとインポートされたファイルが読み込まれませんか?

A.最新のコードには新しいホワイトリスト機能があります。外部ホストを参照している場合は、PhoneGap.plistの「ExternalHosts」キーの下にホストを追加する必要があります。ワイルドカードは問題ありません。したがって、「 http://phonegap.com 」に接続している場合は、リストに「phonegap.com」を追加する必要があります(または一致するワイルドカード「* .phonegap.com」を使用します)サブドメインも)。 (注:Xcodeでplistファイルを開く場合、XML構文をいじる必要はありません。)

Androidの場合、cordova.xmlを編集して、socketioホストへのアクセスを追加する必要があります。

<access Origin="Host*"/> 

index.html(socketioの例を使用):

...
<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>
...

app.js(サーバー側のjavascript /基本的なsocketioの例):

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);
    });
});

あなたがあなたのsocket.ioサーバーのホスト名で置き換える必要があるホスト!

19
user584545

PhoneGapを使用して、file://プロトコルを使用してWebページを開きます

file://プロトコルでは、OriginはWebSocket接続に設定されていないため、サーバーがAccess-Control-Allow-Originヘッダーから応答を有効にする [〜#〜] cors [〜#〜]

次のようなPhoneGapプラグインの使用を検討してください。これは、ネイティブコードを使用して接続を処理しますが、WebView内で(うまくいけば標準互換の)WebSocket APIを有効にします

Android: https://github.com/anismiles/websocket-Android-phonegap

iPhone: https://github.com/remy/PhoneGap-Plugin-WebSocket

これらのプラグインは私が見つけた最初のプラグインであり、どれだけ積極的に開発されて安定しているかはわかりません

5
BFil

したがって、PhoneGapのfile:// urlプロトコルで開いたWebページがヘッダー "Access-Control-Allow-Origin:*"を送信する場合、理論的にはすべてsocket.ioで動作するはずです。

(NSURLProtocolを使用してこれを行うことは可能ですが、修正を知らずにこのうさぎの穴を下りたくありませんでした)

2
Shazron