3

我在我的网页上运行一个小的 jquery 代码:

<!-- myjs.js -->
<script type="text/javascript">
$(document).ready(function() {  
$("body").append('<div id="ajaxBusy" class="ajaxBusy"></div>');
</script>

如您所见,我在我的 html 正文中添加了一个具有特定类和 id 名称的 div。

如何通过 actionscript 3.0 执行这个 .js 文件?我的意思是制作一个flash电影并调用这个文件,或者是否可以通过AS 3.0执行内联javascript代码?

我找到了下面的代码,但我无法让它工作:

import flash.external.ExternalInterface;

var someVarInAS : String = 'foo';
var someOtherVarInAS : int = 10;
var jsXML : XML = 
<script type="text/javascript">
    var someVarInJS = '{$("body").append('<div id="ajaxBusy" class="ajaxBusy"></div>');}';
    var someOtherVarInJS = '{$('#ajaxBusy).fadeIn();}';
    <![CDATA[       
        alert( 'this comes from flash: ' + someVarInJS + ', ' + someOtherVarInJS );
    ]]>
</script>;

ExternalInterface.call( "function js_" + ( new Date().getTime() ) + "(){ " + jsXML + " }" );
4

2 回答 2

1

我使用它从 AS3 动态加载 JS 文件,它工作得很好。可以修改为运行普通 js 而不是加载另一个文件:

var script:String = "" + 
    "var newscript = document.createElement('script');" +
    "newscript.type = 'text/javascript';" +
    "newscript.async = true;" +
    "newscript.src = 'SomeJavascriptFile.js';" +
    "(document.getElementsByTagName('head')[0]||document.getElementsByTagName('body')[0]).appendChild(newscript);";

if ( ExternalInterface.available ) {
    ExternalInterface.call("eval", script);
}
于 2013-06-27T05:29:59.350 回答
0

您还可以避免在 actionscript 中编写 javascript,并将两者分开放在不同的位置。然后只需使用 ExternalInterface 调用方法名称,而不是调用“eval”并传入您的 javascript。以后测试和维护可能会更容易。

在您的 html 文件中:

<script>
    function addDiv(){
        // stuff here that adds the div you want, such as what you had:
        $("body").append('<div id="ajaxBusy" class="ajaxBusy"></div>');
    }
</script>

然后在flash里面:

if (ExternalInterface.available == true) {
    ExternalInterface.call("addDiv");
}

如果需要,您还可以提供从 flash 到 javascript 的方法参数。

于 2013-06-27T06:06:21.563 回答