我有这个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 + " }" );
任何人都可以帮我这样做吗?
答案 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);
但我建议不要这样做。保持语言分离将使代码更简洁,更容易调试。