0

ねえ、私はExternalInterfaceを動作させるのにかなり苦労しています.

あまりにも長い間見ていたため、見逃してしまったことを願っています。

flash_ready 関数は objectID を正しく返しています。私が知る限り、他のすべては順調です。

残念ながら、それを実行すると、基本的に document.getElementById( <movename>).test() は有効なメソッドではないというエラー (ブラウザーによって異なります) が表示されます。

コードは次のとおりです。

JavaScript:

function flash_ready(i){
    document.getElementById(i).test('success!'); 
}

埋め込み Html (生成):

<script type="text/javascript">
    swfobject.embedSWF("/chainmaille/includes/media/flash/upload_image.swf", "/chainmaille/includes/media/flash/upload_image", "500", "50", "9.0.0","expressInstall.swf", {}, {allowScriptAccess:'always', wmode:'transparent'},{id:'uploader_flash',name:'uploader_flash'});
</script>
<object type="application/x-shockwave-flash" id="uploader_flash" name="uploader_flash" data="/chainmaille/includes/media/flash/upload_image.swf" width="500" height="50"><param name="allowScriptAccess" value="always"><param name="wmode" value="transparent"></object>

AS3 :

package com.jesseditson.uploader {

  import flash.display.MovieClip;
  import flash.external.ExternalInterface;
  import flash.system.Security;

    public class UI extends MovieClip {

     // Initialization:
     public function UI() {
        Security.allowDomain('*');
        ExternalInterface.addCallback("test", test);

        var jscommand:String = "flash_ready('"+ExternalInterface.objectID+"');";
        var url:URLRequest = new URLRequest("javascript:" + jscommand + " void(0);");
        navigateToURL(url, "_self");
    }

    public function test(t){
      trace(t);
    }
  }
}

Swfobject は Google コードを介してインクルードされており、Flash は問題なく埋め込まれているため、問題はありません。

別のサーバーで非常によく似たセットアップが動作していますが、このサーバーでは動作していないようです。これは Hostgator 共有サーバーです。サーバーのせいでしょうか?明らかな構文の問題が見られる人はいますか?

前もって感謝します!

4

5 に答える 5

1

さらに調査した結果、フラッシュ オブジェクトの複数のインスタンスに問題があったようです。これは、フラッシュ オブジェクトをライトボックスに複製していたためです。私は今それを働かせました。

于 2010-06-16T00:22:30.890 に答える
1

これで5時間格闘しました。それはすべて本当にイライラしました。私の場合、解決策は非常に単純で、私はそれを推測したことはありませんでした. まず最初に、ブラウザ内のファイルで Flash Player デバッガーが実行されているのを見たことがない人は、このリンクを見つけてセットアップを行うと、少し魔法のような体験ができます :) さて、ExternalInterface の発見: サンドボックス違反がありました同じドメイン内。これは、フラッシュが yourdomain.com から www.yourdomain.com にアクセスできないことを意味します。もちろん奇妙なことは、ExternalInterface でドメインを明示的に呼び出していないことです。とにかく、解決策は非常に簡単でした。これを .htaccess ファイルに追加するだけです。

# Redirect non-www to www 
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) http://www.youtdomain.com/$1 [R=301,L] 

これが誰かを助けることを願っています

于 2011-10-27T05:29:38.483 に答える
1

Flash は実際にはまだ構築が完了していません。コンストラクターからコールバックを呼び出してflash_readyいるため、JS はオブジェクトがステージ上にある前に呼び出そうとしています。flash_readyたとえば、Event.ADDED_TO_STAGEリスナーに呼び出しを移動すると、動作が開始されます。

于 2010-04-29T21:58:04.513 に答える
0

ソースを投稿してください(事前に生成されたもの)。ブラウザに [Flash].Method is not a function と表示された場合、99% の確率で、.swf の準備が整う前に Flash で関数を呼び出そうとしたことを意味します。あなたがそれをやろうとしたのはわかりますが、明らかに機能していないので、何かがおかしいに違いありません。事前にレンダリングされたソースを投稿してください。問題を見つけることができると確信しています。

于 2010-04-29T21:52:57.470 に答える
0

flash_ready は期待どおりの objectID を受け取っていますか?

また、使用する理由:

var jscommand:String = "flash_ready('"+ExternalInterface.objectID+"');";
var url:URLRequest = new URLRequest("javascript:" + jscommand + " void(0);");
navigateToURL(url, "_self");

これがそれを行うように設計されている場合:

ExternalInterface.call("flash_ready", ExternalInterface.objectID);
于 2010-04-29T17:21:05.773 に答える