2012-05-24 59 views
21

當我嘗試使用Socket.io與PhoneGap的我得到這個錯誤:Socket.io + PhoneGap的

(在哪裏socket.io應該得到支持的iOS)

Origin null is not allowed by Access-Control-Allow-Origin. 

這是因爲我的應用程序通過file://協議提供。我能做些什麼來解決這個問題?

謝謝!

回答

5

使用PhoneGap的網頁使用文件打開://協議

隨着文件://協議沒有原點設置爲WebSocket連接,因此瀏覽器將引發的安全異常,如果服務器不訪問控制允許來源頭設置爲響應使CORS

考慮使用一些PhoneGap的插件像下面,使用本機代碼來處理連接,但是實現了(希望準則性兼容)WebS在網頁視圖內OCKET API

安卓:https://github.com/anismiles/websocket-android-phonegap

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

這些插件僅僅是第一批,我發現,不知道他們有多少積極開發和穩定

2

因此,如果在PhoneGap中使用file:// url協議打開的網頁是發送頭「Access-Control-Allow-Origin:*」 - 理論上它應該可以與socket.io一起使用?

(有可能通過NSURLProtocol這樣做,但我不希望走這兔子洞不知道修復)

19

你必須在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服務器的主機名來代替!

+1

僅限此Android?我爲iOS構建,沒有cordova.xml,只有cordova.plist。你在iOS上做過這些嗎?謝謝! – fancy

+2

是(cordova.xml僅限android)。對於iOS,您必須將HOST放在PhoneGap.plist中(請參閱http:// stackoverflow。com/a/8972890/584545) – 2012-06-05 12:25:55

+0

將主機添加到白名單並沒有做任何事情,只要設置orgin即是問題。下面的Shazron(誰創建PhoneGap)有正確的想法,我只是不知道該怎麼做。 – fancy