2

我有这个 javascript 代码:

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

到目前为止,我的代码运行良好,但我想将此 javascript 代码加载到 AS3 中。

有没有可能让它发生?在我的闪存中编写内联 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 + " }" );

谁能帮我做到这一点?

4

1 回答 1

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);

监听来自 javascript 调用的事件fromJS并调用内部函数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);

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

于 2013-06-26T20:32:49.170 回答