當我嘗試使用Socket.io與PhoneGap的我得到這個錯誤:Socket.io + PhoneGap的
(在哪裏socket.io應該得到支持的iOS)
Origin null is not allowed by Access-Control-Allow-Origin.
這是因爲我的應用程序通過file://
協議提供。我能做些什麼來解決這個問題?
謝謝!
當我嘗試使用Socket.io與PhoneGap的我得到這個錯誤:Socket.io + PhoneGap的
(在哪裏socket.io應該得到支持的iOS)
Origin null is not allowed by Access-Control-Allow-Origin.
這是因爲我的應用程序通過file://
協議提供。我能做些什麼來解決這個問題?
謝謝!
使用PhoneGap的網頁使用文件打開://協議
隨着文件://協議沒有原點設置爲WebSocket連接,因此瀏覽器將引發的安全異常,如果服務器不訪問控制允許來源頭設置爲響應使CORS
考慮使用一些PhoneGap的插件像下面,使用本機代碼來處理連接,但是實現了(希望準則性兼容)WebS在網頁視圖內OCKET API
安卓:https://github.com/anismiles/websocket-android-phonegap
iPhone:https://github.com/remy/PhoneGap-Plugin-WebSocket
這些插件僅僅是第一批,我發現,不知道他們有多少積極開發和穩定
因此,如果在PhoneGap中使用file:// url協議打開的網頁是發送頭「Access-Control-Allow-Origin:*」 - 理論上它應該可以與socket.io一起使用?
(有可能通過NSURLProtocol這樣做,但我不希望走這兔子洞不知道修復)
你必須在socketio主機添加到PhoneGap的了「ExternalHosts」鍵。 plist中。
見Faq:
Q. Links to and imported files from external hosts don't load?
A. The latest code has the new white-list feature. If you are referencing external hosts, you will have to add the host in PhoneGap.plist under the "ExternalHosts" key. Wildcards are ok. So if you are connecting to " http://phonegap.com ", you have to add "phonegap.com" to the list (or use the wildcard "*.phonegap.com" which will match subdomains as well). (Note: If you open the plist file in Xcode, you won't need to fiddle with the XML syntax.)
爲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服務器的主機名來代替!
僅限此Android?我爲iOS構建,沒有cordova.xml,只有cordova.plist。你在iOS上做過這些嗎?謝謝! – fancy
是(cordova.xml僅限android)。對於iOS,您必須將HOST放在PhoneGap.plist中(請參閱http:// stackoverflow。com/a/8972890/584545) – 2012-06-05 12:25:55
將主機添加到白名單並沒有做任何事情,只要設置orgin即是問題。下面的Shazron(誰創建PhoneGap)有正確的想法,我只是不知道該怎麼做。 – fancy