在闪光中,我放了:
Security.allowDomain("*");
socket = new FlashSocket("http://engine.WEBSITE1.com:8002");
当我在线运行 flash 文件时,它会自动通过端口 8002 向我的 node.js 应用程序询问/crossdomain.xml,所以我在 socket.io 连接之前添加了这段代码:
app.get('/*',function(req,res,next){
if(req.method==='GET'&&req.headers.referer.indexOf('http://WEBSITE0.com/')===0&&req.url==='/crossdomain.xml'){
console.log('/crossdomain.xml');
flash=true;
var body='<cross-domain-policy><allow-access-from domain="WEBSITE0.com" to-ports="8002"/></cross-domain-policy>';
console.log(body);
res.writeHead({'Content-Type':'text/x-cross-domain-policy'});
res.write(body);
res.end();
}
else if(req.method==='GET'){console.log('???');console.dir(req);}
});
我看到我获得了跨域策略,但仍然因违反安全沙盒而被拒绝。事实上,这种违规行为根本不是我所期望的,因为 flash 要求跨域策略然后拒绝从那里加载数据,即使我在两个网站上都有相同的(从网站名称来看)crossdomain.xml
<cross-domain-policy><allow-access-from domain="WEBSITENAME" to-ports="*"/></cross-domain-policy>
即使这样,我的 swf 文件也无法接收 FlashSocketEvent.CONNECT 事件;在我的 node.js 应用程序中,我放了这个:
io.sockets.on('connection',function(socket){
if(flash===true){console.log('flash');}
我确实看到控制台说“闪光”!只是 adobe 对我说不……有什么想法吗?