Actionscript 3内联Javascript

时间:2013-06-26 20:01:30

标签: javascript actionscript-3

我有这个javascript代码:

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

我的代码到目前为止工作正常,但我想在AS3中加载这个javascript代码。

是否有可能实现这一目标?在我的flash中写入内联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 = '{$('#login').fadeIn();}';
    <![CDATA[       
        alert( 'this comes from flash: ' + someVarInJS + ', ' + someOtherVarInJS );
    ]]>
</script>;


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

任何人都可以帮我这样做吗?

1 个答案:

答案 0 :(得分:2)

以下是一个示例链接,用于说明ExternalInterface如何运作

https://dl.dropboxusercontent.com/u/15551758/eitest.zip

发生的事情是,一旦Flash对象加载到页面上,就会使用

ExtenalInterface.call();

调用已在swf所在的页面上注册的javascript函数。在示例的情况下:

ExternalInterface.call('toJS', 'flash text');

调用javascript函数toJS并发送一个参数,即字符串"flash text"

也支持相反的方向。在flash对象上调用函数并传入参数会将它们发送到flash。使用以下命令注册ExternalInterface回调:

ExternalInterface.addCallback(callback_name, flash_function_to_call);

在示例中,我们在flash中注册了一个回调函数:

ExternalInterface.addCallback("fromJS", this.fromJS);

从名为fromJS的javascript中侦听事件并调用内部函数fromJS。例如,我在舞台上添加了一个文本框,以显示来自javascript的数据。

如果这回答了您的问题,或者您需要更多解释,请告诉我。

编辑:

如果你必须注入javascript,你可以传入一个执行注入的函数作为ExternalInterface.call的第一个参数:

var inject:String = "function(){var body = document.getElementsByTagName('body')[0], testNode = document.createElement('div'); testNode.innerHTML = 'This is a test'; body.appendChild(testNode);}";
ExternalInterface.call(inject);

但我建议不要这样做。保持语言分离将使代码更简洁,更容易调试。