0

javascript からフラッシュ関数を呼び出す必要があります。これを行うには、flash.external と addCallback を使用します。すべてがうまく機能しますが、フラッシュで FileReference を使用すると、関数がブラウザを開きませんでした ...

以下の説明を参照してください:
私はこのコードを使用して JavaScript で関数を呼び出します <input type="button" value="Browse" onclick="sendToFlash('Hello World! from HTML');" /> : 以下のようにすべての HTML を見ることができます:

<html>
<head>
<title>Upload test</title>
</head>
<script>
function hello (size) {
    alert ("size hast: " + size);
}

function sendToFlash(val){
    var flash = getFlashObject();
    flash.new_browser(val);
}

var flash_ID = "Movie2";
var flash_Obj = null;
function getFlashObject(){
    if (flash_Obj == null){
        var flashObj;
        if (navigator.appName.indexOf( "Microsoft" ) != -1){
           flashObj = window[flash_ID];
        } 
        else{
           flashObj = window.document[flash_ID];
        }
        flash_Obj = flashObj;
    }
    return flash_Obj;
}
</script>

  <body>
    <center>

    <embed width="560" height="410" type="application/x-shockwave-flash" 
    flashvars="sampleVars=loading vars from HTML" 
    salign="" allowscriptaccess="sameDomain" allowfullscreen="false" menu="true" name="Movie2" 
    bgcolor="#ffffff" devicefont="false" wmode="window" scale="showall" loop="true" play="true" 
    pluginspage="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" 
    quality="high" src="Movie2.swf">

    </center>

    <input type="button" value="Browse" onclick="sendToFlash('Hello World! from HTML');" />
  </body>
</html>

HTMLページをクリックBrowseすると、javascriptがsendToFlash関数を呼び出し、SendToFlash関数が文字列(HTMLからHello World!)をフラッシュに送信します。
フラッシュでは、以下のコードでこの文字列を取得します:

resultsTxtField.text = "";
uploadButton.onPress = function () {
   return browse_file("Hello World! from Flash");
}

import flash.external.*;
ExternalInterface.addCallback("new_browser", this, browse_file);


function browse_file (my_test_val) {
    _root.resultsTxtField.text = "val: " + my_test_val;
    import flash.net.FileReference;
    var fileTypes:Array = new Array();
    var imageTypes:Object = new Object();
    imageTypes.description = "Images (*.jpg, *.jpeg, *.gif, *.png)";
    imageTypes.extension = "*.jpg; *.jpeg; *.gif; *.png";
    fileTypes.push(imageTypes);

    var fileListener:Object = new Object();
    var btnListener:Object = new Object();
    var fileRef:FileReference = new FileReference();
    fileRef.addListener(fileListener);
    fileRef.browse(fileTypes);

    fileListener.onCancel = function(file:FileReference):Void
    {
      _root.resultsTxtField.text += "File Upload Cancelled\n";
    }

    fileListener.onSelect = function(file:FileReference):Void
    {
      _root.resultsTxtField.text += "File Selected: " + file.name + " file size: "+ file.size + " file type: " + file.type;
      getURL("javascript:hello("+file.size+");");
    }
}

シーンは 1 つしかなく、このコードはこのシーンのルートにあります。このサンプルでは、​​名前が付けられた 1 つのムービー クリップがuploadButtonあり、ボタンとして機能する四角形しかありません。
呼び出された長方形をクリックするbrowse_file("Hello World! from Flash");と、ブラウザが開き、アップロードする写真を選択できます。
HTMLでクリックするbrowseと同じプロセスが必要ですが、変数が関数に送信されるのを見るとbrowser、写真を選択するためにそれ以上開かれませんでした。
いくつかの方法を試します。たとえば、新しい関数をオープンのみにするpicture browserか、新しいシーンを設定するか、gotoAndPlay などを使用するように設定しましたが、別の問題があります。 以下のリンクからソースを

ダウンロードできます:
http://www.4shared.com/zip/YTB8uJKE/flash_uploader.html
onclick="sendToFlash('Hello World! from HTML');"直開きでは動作しません。localhost で開く必要があります。

手がかりがあればとても嬉しいです。
どうもありがとう
Reza Amya

4

2 に答える 2

0

プログラムで を呼び出すことはできませんbrowse()。Flash 内でマウスをクリックする必要があります: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/FileReference.html#browse ()

Flash Player 10 および Flash Player 9 Update 5 では、このメソッドを正常に呼び出すことができるのは、ユーザー イベント (たとえば、マウス クリックまたはキー押下イベントのイベント ハンドラー) に応答する場合のみです。それ以外の場合、このメソッドを呼び出すと、Flash Player はエラー例外をスローします。

于 2012-06-22T09:30:02.950 に答える
0

一日読んだ後、セキュリティ上の理由からそれが不可能であることを知っています。そうすれば、 JavaScriptコード
でファイル参照を開くことはできません。addCallback詳細については、fileReference を参照してください。js からブラウズし、フラッシュでキープレスをシミュレートします。


ありがとうございました
Reza Amya

于 2012-06-23T08:01:00.650 に答える