私はこれを行うための合理化された方法を作成するために見つけることができるすべてのリソースを調べましたが、試みるたびに根本的なエラーの1つが発生します。私はそれを機能させることができません!
これが私の映画の最初のキーフレームからの私のフラッシュテストアクションスクリプトです:
import flash.external.*; //THIS...
System.security.allowDomain("http://localhost", "*"); //...AND THIS ALSO REQUIRED!
if (ExternalInterface.available) {
trace("ExternalInterface= " + ExternalInterface.available);
flash.external.ExternalInterface.addCallback("myExternalMethod", null, myFunction);
}
function myFunction() {
gotoAndStop(2);
}
そして、これが私のjavascript/jQueryのほんの少しです:
<script type="text/javascript">
var flashvars = {};
var params = {
wmode: "transparent",
allowscriptaccess: "always"
};
var attributes = { //The addition of these attributes make it work!
id: "number-input",
name: "number-input"
};
var embedHandler = function (e){
mySWF = e.ref;
};
swfobject.embedSWF("images/flash-form.swf", "number-input", "800", "320", "9.0.0", "expressInstall.swf", flashvars, params, attributes, embedHandler);
function executeFlash() {
getObjectById("number-input").myExternalMethod();
}
function getObjectById(objectIdStr) {
var r = null;
var o = document.getElementById(objectIdStr);
if (o && o.nodeName == "OBJECT") {
if (typeof o.SetVariable != undefined) {
r = o;
} else {
var n = o.getElementsByTagName(OBJECT)[0];
if (n) {
r = n;
}
}
}
return r;
}
$(function() {
$('#main-button-big').click(function(event){
event.preventDefault();
executeFlash();
});
});
</script>
私が何か愚かなことをすると、フラッシュはうまく埋め込まれているようです...
$(mySWF).hide();
...非表示になるので、スクリプトがオブジェクトを認識できると確信しています。
どんな方法を試しても、常に(Firefoxでテストして)次のようなエラーが発生します。
エラー:TypeError:mySWF.myExternalMethodは関数ではありません。
サファリで:
TypeError:'undefined'は関数ではありません('mySWF.myExternalMethod()'を評価しています)
getElementByIdのjQueryバージョン(embedHandlerを一周する)を試してみると、次のようになります。
エラー:TypeError:$(...)。myExternalMethodは関数ではありません。またはTypeError:'undefined'は関数ではありません('$('#number-plate-input')。myExternalMethod()'を評価しています)
私はこのプロジェクトを迅速に終わらせる必要があり、私のテザーの終わりにいます。どんな助けでも非常にありがたいことに受け取られるでしょう。
更新:embedHandlerは不要になり、あらゆる種類のイベントをトリガーするために使用されなくなったことに注意してください。ただし、これは便利なコードなので、そのままにしておくことにしました。