0

如何从 java 脚本中调用 flex 函数?我正在使用以下链接中定义的以下代码

ExternalInterface.addCallback( "javascriptfunction", flexfunction);

http://www.switchonthecode.com/tutorials/flex-javascript-basics-using-externalinterface

http://circlecube.com/2010/12/actionscript-as3-javascript-call-flash-to-and-from-javascript/

4

2 回答 2

0

flex 4.5

首先添加一个 addcallback,就像在你的 mxml 中这样

public function initApp():void {
        ExternalInterface.addCallback("myFlexFunction",myFunc);
}  

myFlexFunction现在可以从您的 javascript 访问。

让你的 index.template.html 看起来像这样

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- saved from url=(0014)about:internet -->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>
        <title>addCallback() Wrapper</title>
        <script type="text/javascript" src="swfobject.js"></script>
        <script type="text/javascript">
            var swfVersionStr = "0";
            var xiSwfUrlStr = "";
            var flashvars = {};
            var params = {};
            params.quality = "high";
            params.bgcolor = "#ffffff";
            params.allowscriptaccess = "sameDomain";
            var attributes = {};
            attributes.id = "AddCallbackExample";
            attributes.name = "AddCallbackExample";
            attributes.align = "middle";
            swfobject.embedSWF(
                "AddCallbackExample.swf", "flashContent",
                "100%", "100%",
                swfVersionStr, xiSwfUrlStr,
                flashvars, params, attributes);
        </script>
    </head>
    <SCRIPT LANGUAGE="JavaScript">
        function callApp() {
            window.document.title = document.getElementById("newTitle").value;
            var AddCallbackExample = document.getElementById("AddCallbackExample");
            AddCallbackExample.myFlexFunction(window.document.title);
        }
    </SCRIPT>

    <body>
        <form id="f1">
            Enter a new title: <input type="text" size="30" id="newTitle" onchange="callApp()">
        </form>
        <div id="flashContent"/>
   </body>
</html>

和你这样的弹性应用程序

<?xml version="1.0"?>
<!-- wrapper/AddCallbackExample.mxml -->
<s:Application 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    xmlns:s="library://ns.adobe.com/flex/spark" creationComplete="initApp()">
    <fx:Script>
        import flash.external.*;

         public function initApp():void {
            ExternalInterface.addCallback("myFlexFunction",myFunc);
         }  

         public function myFunc(s:String):void {
            l1.text = s;
         }
    </fx:Script>

    <s:Label id="l1"/>

</s:Application>

希望这可以帮助

于 2012-04-24T12:33:28.180 回答
0

您应该为您的问题提供更多背景信息。根据我在教程中阅读的内容,您可能忽略了为代码添加安全访问权限。更准确地看这里:http ://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html#addCallback%28%29 ,尤其是这里:

SecurityError — 包含环境属于调用代码无权访问的安全沙箱。要解决此问题,请执行以下步骤: 在包含 HTML 页面的 SWF 文件的对象标记中,设置以下参数:

param name="allowScriptAccess" value="always" 

In the SWF file, add the following ActionScript:

flash.system.Security.allowDomain(sourceDomain)

希望能帮助到你。

于 2012-04-18T12:37:54.153 回答