Как передать значение из сценария Java во встроенный объект Flex? - PullRequest
3 голосов
/ 19 февраля 2011

Я пытаюсь понять, как передать строковое значение (url) из html-формы во встроенный объект flex. единственный метод, который я нашел до сих пор, это метод "addCallback", описанный в http://livedocs.adobe.com/flex/3/html/help.html?content=passingarguments_5.html В этом примере я использовал функцию flex "myFunc (s: String)", зарегистрированную в "ExternalInterface" и вызываемую позже из javascript

---> mySwf.mxml:

<?xml version="1.0"?>
<!-- wrapper/AddCallbackExample.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp()">
  <mx:Script>
     import flash.external.*;
      import mx.controls.Alert;
     public function initApp():void {
        ExternalInterface.addCallback("myFlexFunction",myFunc);
     }  
     public function myFunc(s:String):void {

         Alert.show(s, 'Alert Box', mx.controls.Alert.OK);
     }

  </mx:Script>
  <mx:Button id="myButton" 
        label="FLEX BUTTON" 
        click="Alert.show('FLEX LOADED!', 'Alert Box', mx.controls.Alert.OK);"/>
  <mx:Label id="l1"/>

</mx:Application>

external.html

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<SCRIPT LANGUAGE="JavaScript">
    function callApp() {

        mySwf.myFlexFunction("show me something");
    }
</SCRIPT>


<form id="f1">
    <button onClick="callApp()">HTML BUTTON</button>
</form>

<OBJECT CLASSID="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
WIDTH="850"
HEIGHT="610"
CODEBASE="http://active.macromedia.com/flash5/cabs/swflash.cab#version=5,0,0,0">
<EMBED SRC="mySwf.swf"
WIDTH="850"
HEIGHT="610"
PLAY="true" 
LOOP="true"
QUALITY="high" 
scale="noborder"
PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"> 
</EMBED>
</OBJECT>
</html>

Этот метод, похоже, не работает вообще. Если я нажимаю кнопку Flex - я вижу диалоговое окно Flex. Когда я нажимаю кнопку HTML, вызывая myFunc во Flex через ExternalInterface - ничего
бывает ... Есть какие-нибудь указатели на ошибки в моем коде? Спасибо,

1 Ответ

1 голос
/ 19 февраля 2011

Попробуйте, если вы не используете нужный браузер:

<SCRIPT LANGUAGE="JavaScript">
    // This function returns the appropriate reference, 
    // depending on the browser.
    function getFlexApp(appName)
    {
      if (navigator.appName.indexOf ("Microsoft") !=-1)
      {
        return window[appName];
      } 
      else 
      {
        return document[appName];
      }
    }

    function callApp() {
        getFlexApp('mySwf').myFunc("show me something");
    }

</SCRIPT>

также вы не указали идентификатор для вашего объекта, как DOM идентифицирует

<OBJECT id='mySwf' CLASSID="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000">

попробуйте это:

ExternalInterface.addCallback("myFunc",myFunc);
...