22

PhoneGapでSocket.IOを使用しようとすると、次のエラーが発生します。

(socket.ioがサポートされるべきiOSの場合)

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

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

ありがとう!!

4

3 に答える 3

19

PhoneGap.plist の「ExternalHosts」キーに socketio ホストを追加する必要があります。

よくある質問を参照してください:

Q. 外部ホストへのリンクおよび外部ホストからインポートされたファイルがロードされませんか?

A. 最新のコードには新しいホワイト リスト機能があります。外部ホストを参照している場合は、「ExternalHosts」キーの下の PhoneGap.plist にホストを追加する必要があります。ワイルドカードは問題ありません。そのため、「 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);
    });
});

HOST を socket.io サーバーのホスト名に置き換える必要があります。

于 2012-06-04T18:48:29.150 に答える
5

PhoneGap を使用すると、file://プロトコルを使用して Web ページが開かれます。

file://プロトコルではオリジンが WebSocket 接続に設定されていないため、サーバーがAccess-Control-Allow-Originヘッダーを応答に設定しないと、ブラウザーはそのセキュリティ例外を発生させ、 CORSを有効にします。

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

アンドロイド: https://github.com/anismiles/websocket-android-phonegap

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

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

于 2012-05-24T13:33:24.887 に答える
2

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

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

于 2012-05-25T04:38:15.577 に答える