1

Firefox で ExternalInterface を動作させるのに苦労しています。JavaScript から AS3 関数を呼び出そうとしています。SWF は適切なコールバックでセットアップされ、IE で動作しています。

AC_RunActiveContent.js を使用して、swf をページに埋め込んでいます。ただし、オブジェクト/埋め込みタグに ID を追加するように変更しました。以下は、IE 用と Firefox 用にそれぞれ生成されたオブジェクトと埋め込みタグです。

    <object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="400" height="400" align="middle" id="jpeg_encoder2" name="jpeg_encoder3" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" >
    <param name="movie" value="/jpeg_encoder/jpeg_encoder3.swf" /> 
    <param name="quality" value="high" /> 
    <param name="play" value="true" /> 
    <param name="loop" value="true" /> 
    <param name="scale" value="showall" /> 
    <param name="wmode" value="window" /> 
    <param name="devicefont" value="false" /> 
    <param name="bgcolor" value="#ffffff" /> 
    <param name="menu" value="false" /> 
    <param name="allowFullScreen" value="false" /> 
    <param name="allowScriptAccess" value="always" /> 
</object>


<embed 
    width="400" 
    height="400" 
    src="/jpeg_encoder/jpeg_encoder3.swf" 
    quality="high" 
    pluginspage="http://www.macromedia.com/go/getflashplayer" 
    align="middle" 
    play="true" 
    loop="true" 
    scale="showall" 
    wmode="window" 
    devicefont="false" 
    id="jpeg_encoder2" 
    bgcolor="#ffffff" 
    name="jpeg_encoder3" 
    menu="false" 
    allowFullScreen="false" 
    allowScriptAccess="always" 
    type="application/x-shockwave-flash" > 
</embed>

私はこのように関数を呼び出しています...

<script>
try {
    document.getElementById('jpeg_encoder2').processImage(z);
} catch (e) { alert(e.message); }
</script>

Firefox で、" document.getElementById("jpeg_encoder2").processImage is not a function"というエラーが表示されます。

何か案は?

4

7 に答える 7

2

addCallback を使用して actionscript 関数を Javascript に公開しましたか?

addCallback に関する Adob​​e ドキュメント

于 2009-05-25T08:44:45.310 に答える
1

この投稿を参照してください。

(getElemById ではなく) Flash オブジェクトを取得するために、次のような JS 関数が必要です。

function thisMovie(movieName) {
  if(navigator.appName.indexOf("Microsoft") != -1) {
    return window[movieName];
  } else {
    return document[movieName];
  }
};

ドキュメントが読み込まれるまで、この関数を呼び出さないようにしてください。

于 2011-03-15T20:11:38.683 に答える
1

以下は、Flash ムービーを HTML ページ内に配置する方法の例です。このムービーは、冒頭に停止アクションがある非常にシンプルなムービーです。ムービーは、以下の Test Runs 件名の下に表示されます。この特定の html コードは、FlashMX の Publish コマンドによって自動生成されました。Flash ムービー ファイルは simplemovie.swf であることに注意してください。また、ムービー ファイル名 (.swf 拡張子を除く) と一致するように、Flash によって ID と名前が自動的に割り当てられます。実際には、同じページ内の他の要素で使用されていない限り、name と id は何でもかまいません (ただし、風変わりな名前は使用しないでください。特に、数字で始まるものは使用しないでください)。

`codebase="http://download.macromedia.com/pub/shockwave/cabs/flash`/swflash.cab#version=6,0,0,0" ` WIDTH="150" HEIGHT="75" id="simplemovie" ALIGN=""> ` quality=medium ` swliveconnect="true" ` bgcolor=#FFFFFF WIDTH="150" HEIGHT="75" ` name="simplemovie" ` ALIGN ="" `TYPE="application/x-shockwave-flash" ` PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">

フラッシュ ファイルには再生関数があり、次の関数がその関数を呼び出します。

関数 testEval(stringToEval)
{
  var movie=eval(stringToEval);
  もし(映画)
  {
    if (movie.PercentLoaded())
    {
      if (movie.PercentLoaded()==100)
      {
        ムービー.プレイ();
      }
      そうしないと
      {
        alert("ムービーはまだロード中です。すぐに再試行してください");
      }
    }
    そうしないと
    {
      alert("ムービー オブジェクトが見つかりましたが、コマンドを送信できません");
    }
  }
  そうしないと
  {
    alert("ムービー オブジェクトが見つかりません");
  }
}
于 2011-01-18T13:37:24.510 に答える
0

オブジェクトタグと埋め込みタグの両方で同じIDを使用してみてください。あるブラウザが1つのタグを使用し、別のブラウザが別のブラウザを使用していることを覚えています...どちらがどちらかわかりません。私はしばらく前に同じ問題を抱えていました。

フラッシュに付属しているサンプルコードを変更することで回避できます。それが機能することを確認してから、それを取り除き、私の使用に合わせて調整します。

この例では、オブジェクトタグのIDが「ExternalInterfaceExample」に設定されていることに注意してください。次に、埋め込みタグのnameパラメータも「ExternalInterfaceExample」に設定されています。それがあなたの手がかりかもしれないと思います。

幸運を!

于 2009-05-13T15:17:54.140 に答える
0

次の 2 つのことを試してください。

まず、次のように Javascript から関数を呼び出してみます。

var swf;
if(navigator.appName.indexOf("Microsoft") != -1) {
    swf = window["jpeg_encoder2"];
} else {
    swf = document["jpeg_encoder2"];
}
if(typeof(swf) == "undefined") swf = document.getElementById("jpeg_encoder2");

swf.processImage(z);

次に、Firefox での ExternalInterface 呼び出しは、object タグではなく、embed タグでのみ機能するように見えることがわかりました。埋め込みタグを使用するだけで機能するかどうかを確認してください。(現時点では、あなたが投稿した HTML/Javascript コンボが object にアクセスするのか、embed 要素にアクセスするのかはっきりしていません。)

于 2010-08-25T05:46:29.443 に答える
0

AC_RunActiveContent.js を使用して Flash ムービーを埋め込む代わりに、swfobject を使用する場合は、組み込みの簡単な方法があります。

<head>
 <script type="text/javascript" src="swfobject.js"></script>

 <script type="text/javascript">
 try {
      swfobject.getObjectById('jpeg_encoder2').processImage(z); 
      } catch (e) { alert(e.message); }
 </script>
</head>

swfObject を使用していない場合は、swfobject.getObjectById をコピーしてコードに直接貼り付けることができます

<script type="text/javascript">

function getObjectById(objectIdStr) {
        var r = null;
        var o = getElementById(objectIdStr);
        if (o && o.nodeName == "OBJECT") {
            if (typeof o.SetVariable != UNDEF) {
                r = o;
            }
            else {
                var n = o.getElementsByTagName(OBJECT)[0];
                if (n) {
                    r = n;
                }
            }
        }
        return r;

getObjectById('jpeg_encoder2').processImage(z); //call your method 
</script>
于 2011-04-25T09:09:58.923 に答える
0

それらを呼び出す前に、swf が (ページ上に) 表示されていますか? そうでない場合は、これを読んでください: swf-not-initializing-until-visible

于 2010-05-05T23:23:41.747 に答える