2011-06-18 6 views
1

javascriptからmy swfのメソッドにコールバックしています。 Firefoxでは問題なく動作しますが、クロムで渡される2番目のパラメータは常にnullとして受け取りますか?クロムのAS3 javascriptコールバックの問題

javascriptをデバッグしたところ、すべてがうまくいき、swfに渡される2つの値が、swfへのコールバックが行われた時点で正しいことがわかりました。

私はこれがクロスドメインの問題かもしれないと思っていましたが、それが事実であるかのように、swfのメソッドはまったく呼び出されません。 2番目の値はイメージのバイナリ文字列表現で、渡される文字列の長さは101601です。したがって、渡すことができるデータ量に制限があるかどうか疑問に思っていますか?最初のパラメータは、ファイルの種類を表すはるかに小さい文字列で、これは常に正常に受信されます。

私が言ったように、奇妙なことは、それはFirefoxで完璧に動作しますか?

注 - これは文字列の長さが133に過ぎず、それでもまだ失敗する、もっと小さな画像(愚かなことに、私がこれを書いたまではテストしなかった)で試したところです。だからそれを支配する。

AS3のドキュメントもチェックしましたが、このような制限はありません。

文字列は、FileReaderクラスのreadAsBinaryString()メソッドを使用して生成されています。私が知っている限り、これはバイナリのUTF 16文字列表現を出力します。私はこれが問題ではないはずだと思っていますが、これはまだ文字列であり、エンコーディングはデコードに本当に影響します。もちろん

Javascriptを

var readFile = function(file) 
{ 
    var reader = new FileReader(); 

    reader.onloadend = function(evt) 
    { 
     alert(reader.result.length);//this outputs the correct length 
     alert(reader.result); //this outputs the binary encoded as a String 

     swf.addImage(file.type, reader.result); 
    } 

    reader.readAsBinaryString(file); 
} 

AS3

ExternalInterface.addCallback("addImage", addImageHandler); 

private function addImageHandler(type:String, file:String):void 
{ 
    trace("type: ", type);//this traces the type correctly 
    trace("file: ", file);//this traces out null in chrome, but traces the binary string in firefox 
} 
+0

あなたには、いくつかのコードが含まれる場合は、より高速な答えを得る可能性があります。あなたが解決策を見つけることを願っています。 – Bemmu

+0

ありがとう、うまくいけば、これは役に立ちます – barry

+0

私は以下の質問に答えました – barry

答えて

0

コードサンプルのないあなたから、このすべてで助けるが、それはできた場合でない可能性があります。

これは

function JavaScriptFunctionName(arg1, arg2) { ... 
+0

ありがとう。私は問題がFirefoxでうまくいっているので、コールバックが追加されているということではないと思っています。それはChromeでうまく動作しないようなことでしょうか? – barry

1

soからUTF-16エンコードされた文字列を渡すと問題があるように表示されます。これは、JS関数です

ExternalInterface.call("JavaScriptFunctionName", arg1_value, arg2_value); 

:私は2つのパラメータが言うとAS3からJS関数を呼び出す方法javascriptをフラッシュするだけですが、chromeでしか使用できません。

私はなぜこれが当てはまるのかわかりませんが、UTF-16文字列をbase46にエンコードするか、またはJavaScriptをUTF-16からUTF-8に変換してからswfに渡します。 、すべて期待どおりに動作します。さらにテストで

EDIT

、解決策が予想よりも簡単であることが判明し、それはUTF-16文字列にencodeURIを呼び出した後、もう一方の端にdecodeURIを呼び出すだけのケースでした。

Javascriptを

var reader = new FileReader(); 

reader.onloadend = function(evt) 
{ 
    swf.addImage(file.type, encodeURI(reader.result)); 
} 

reader.readAsBinaryString(file); 

AS3

private function dropHandler(type:String, file:String):void 
{ 
    file = decodeURI(file); 
    ... 
}