Flex/Flash を使用して、ローカル マシンで実行されているサードパーティのビデオ会議アプリとブラウザから通信しようとしています。ユーザーが私たちのウェブページにログインできるという考えは、ページがローカルアプリを開いて適切なチャットルームに移動するように指示します. 混合ソースの警告をバイパスするには、ブリッジとしてフラッシュが必要です。私の AS コード:
public function Check():void {
import flash.events.SecurityErrorEvent;
import flash.external.ExternalInterface;
import flash.net.Socket;
import flash.system.Security;
var mySocket:Socket = new Socket();
Security.loadPolicyFile('xmlsocket://127.0.0.1:63457');
mySocket.addEventListener(Event.CONNECT, onConnect);
mySocket.addEventListener(Event.CLOSE,onClose);
mySocket.addEventListener(IOErrorEvent.IO_ERROR, onError);
mySocket.addEventListener(ProgressEvent.SOCKET_DATA, onProgress);
mySocket.addEventListener(DataEvent.DATA, onData);
mySocket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
function onConnect(event:Event):void {
trace('connect');
}
function onClose(event:Event):void {
trace('close');
}
function onProgress(event:ProgressEvent):void {
trace('Progressevent fired');
var output:String = mySocket.readUTFBytes(mySocket.bytesAvailable);
ExternalInterface.call("alert", output);
}
function onData(event:DataEvent):void {
trace('onData fired');
}
function onSecurityError(event:ErrorEvent) : void {
trace("SECURITY ERROR : " + event.text);
ExternalInterface.call("alert", 'error: ' + event.text, 0);
}
function onError(event:ErrorEvent) : void {
trace("ERROR : " + event.text);
ExternalInterface.call("alert", 'error: ' + event.text, 0);
}
mySocket.connect("127.0.0.1", 63457);
mySocket.writeMultiByte('GET /?url=http://app.mydomain.com HTTP/1.1', 'UTF-8');
mySocket.flush();
};
ローカルでの実行はすべてうまくいき、「onProgress」リスナーが起動され、リクエストに応答するアプリが表示されます。ただし、別のドメインから実行すると失敗します。サンドボックス エラーは発生しません。呼び出しが行われていないようなものです。リモート デバッガーは、接続が正常に確立されたことを示します。
おそらくコードからわかるように、私は AS3 の初心者ですが、ここでこの質問をする前にかなりの調査を行いました。誰かが助けてくれることを願っています。このコードを Flash Pro、Flash Builder (AS プロジェクトと Flex プロジェクトの両方) で試してみましたが、同じ結果になりました。