如何使用ActionScript从Flash动态包含JavaScript?

Jon*_*Jon 0 javascript flash actionscript-3

我有一个flash电影,需要一些包含文件的JavaScript,但我希望能够将它嵌入任何地方而无需脚本标记.

有没有办法使用ExternalInterface库包含外部JavaScript文件,以便稍后调用JavaScript包含文件中的方法?

谢谢!

Cre*_*ers 8

没有多少人意识到这一点,但您可以在.as文件中编写内联Javascript,甚至传递值,如下所示:

var someVarInAS : String = 'foo';
var someOtherVarInAS : int = 10;
var jsXML : XML = 
<script type="text/javascript">
    var someVarInJS = '{someVarInAS}';
    var someOtherVarInJS = {someOtherVarInAS};
    <![CDATA[
        //here be code
        alert( 'this comes from flash: ' + someVarInJS + ', ' + someOtherVarInJS );
    ]]>
</script>;


ExternalInterface.call( "function js_" + ( new Date().getTime() ) + "(){ " + jsXML + " }" );
Run Code Online (Sandbox Code Playgroud)

有几点需要注意:

  1. javascript代码中的{}将转换为您在其间放置的任何变量的值
  2. cdata部分允许你编写你想要的任何javascript代码,否则编译器可以抱怨.
  3. 通过externalinterface调用的所有javascript代码都应放在命名函数中,否则它将无法在少数浏览器中运行.在这段代码中,我使用了一个小技巧(new Date().getTime())来确保函数始终具有唯一的名称,并且不能与可能具有相同名称的另一个名称冲突.
  4. 不要忘记它;背后</script>告诉编译器你的javascript结束那里