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

时间:2009-12-11 21:33:45

标签: javascript flash actionscript-3

我有一部flash动画,需要一些来自包含文件的JavaScript,但我希望能够将它嵌入任何地方而不需要脚本标记。

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

谢谢!

2 个答案:

答案 0 :(得分: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 + " }" );

有几点需要注意:

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

答案 1 :(得分:4)

javascript可以做的一切,可以使用externallinterface完成。我认为最好的方法是将js脚本移植到ac。

这是您可以添加标记的方式:

ExternalInterface.call("document.getElementsByTagName('head')[0].appendChild(document.createElement('script'))");
ExternalInterface.call("document.getElementsByTagName('script')[document.getElementsByTagName('head')[0].getElementsByTagName('script').length-1].setAttribute('type', 'text/javascript')");
ExternalInterface.call("document.getElementsByTagName('script')[document.getElementsByTagName('head')[0].getElementsByTagName('script').length-1].setAttribute('src', 'http://your.server/your.js')");