Flash 6 でコンパイルされた Actionscript 1 で記述された古いプログラムがあります。10 個の他のモジュールをロードします。そのうち 3 つは Actionscript 2 で記述され、Flash 8 でコンパイルされています。元のプログラムは html に埋め込まれ、html ファイルがWeb サーバー上で実行されます。しかし、html ファイルをブラウザにドラッグしただけでは、3 つの AS2 モジュールが読み込まれません。または、より正確には、それらはロードされますが、それらの機能にアクセスできません。すべてのモジュールは、「ローカル再生セキュリティ = ローカル ファイルのみにアクセス」でコンパイルされます。Flash CS3 を使用してすべてのモジュールをコンパイルしています。メインのロード モジュールを AS2 に書き換えずに、これを解決するためにできることはありますか? ありがとう
2 に答える
これがあなたの問題に関連しているかどうかはわかりませんが、AVM1 SWF ファイルを混在させると問題が発生する可能性があります。
出力設定で「バージョン 6r65 用に最適化」オプションを選択せずにフラッシュ SWF をバージョン 6 用にコンパイルすると、生成されるバイトコードは、v6r65 以降用にコンパイルされた AVM1 swf ファイルとほとんど互換性がなくなります (特に AS2 言語を使用する場合)。 AS1)。
これは、_global プロパティへの参照は、これらの以前のバージョン用にコンパイルするときに別の場所を参照するためです。そのため、_global 名前空間で定義されたプロパティは、新しいバージョンをターゲットとするムービーには表示されず、その逆も同様です。
クラス定義が _global 名前空間に変数として存在することを考えると、6r65 の両側にあるバージョンを対象とする swf ファイルを混在させると、これは非常に問題になる可能性があります。
SWF ファイルの 1 つにある _global 参照を、他の SWF ファイルから見える場所にコピーすることで、この問題を回避したことを覚えています。
(6r65より前)
class SomeClass
{
//
}
...
_global.someProp=123;
_level0.globalCopy=_global
(投稿 6r65)
trace(SomeClass) //undefined
trace(_global.someProp) //undefined
trace(_level0.globalCopy.SomeClass) //[object object] i.e. defined
trace(_level0.globalCopy.someProp) //123
Flash のセキュリティ モデルのルールは難解ですが、クロス スクリプトの制限に直面しているようです。1 つのオプションは、たとえば、Apache (またはその他のもの) をインストールしhttp://localhost...
、file://...
. ただし、セキュリティの問題もおそらく解決できます。
最初に、この記事を確認してください。特に、そのページの途中にあるグラフには、ある SWF が別の SWF の機能へのアクセスを許可する場合の基本ルールが示されています。グラフに示されているように、すべてのアクセスを機能させる最も簡単な方法は、すべてのコンテンツを「ローカルの信頼できる」サンドボックスで機能させることです。それを行う方法は、同じ記事の4 ページ目の途中で説明されています。