4 Replies Latest reply on Oct 20, 2010 2:38 PM by Chandra2034

    Calling JavaScript function from Flex 4 web application

    Chandra2034

      Hi,

      I need to call javascript function from Flash 4 based web application. When I run it in Debug mode it runs perfectly but when I make release build or run same application on other machine it does not call JavaScript function.

      For testing I am just calling sample Alert function of JavaScript. Can someone help me what I am missing ?

      <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
          layout="vertical" initialize="application1_initializeHandler(event)" 
          verticalAlign="middle" 
          backgroundColor="white"> 
       
       <mx:Script> 
        <![CDATA[ 
         import mx.controls.Alert; 
         import mx.events.FlexEvent; 
         public function btnLogin_click():void  
         { 
          var s:String;     
          if (ExternalInterface.available)  
          {      
               ExternalInterface.call("alert", "Hello World!");  
          }  
          else  
          { 
           Alert.show("External interface not available"); 
          } 
          trace(s);  
         } 
       
         protected function application1_initializeHandler(event:FlexEvent):void 
         { 
          flash.system.Security.allowDomain("always"); 
         } 
       
        ]]> 
       </mx:Script> 
       
       <mx:Form>        
        <mx:FormItem>         
         <mx:Button id="btnLogin" label="Login" click="btnLogin_click()" />         
        </mx:FormItem>        
       </mx:Form> 
       
      </mx:Application> 
      
        • 1. Re: Calling JavaScript function from Flex 4 web application
          Flex harUI Adobe Employee

          Verify the allowScriptAccess settings

          • 2. Re: Calling JavaScript function from Flex 4 web application
            Chandra2034 Level 1

            Here is the wrapper Html file:

             

            <!

             

             

            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">

             

            <!--

            Smart developers always View Source.

             

            This application was built using Adobe Flex, an open source framework

            for building rich Internet applications that get delivered via the

            Flash Player or to desktops via Adobe AIR.

             

            Learn more about Flex at http://flex.org

            // -->

             

            <head>

             

            <title></title>

             

            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

             

            <!-- Include CSS to eliminate any default margins/padding and set the height of the html element and

            the body element to 100%, because Firefox, or any Gecko based browser, interprets percentage as

            the percentage of the height of its parent container, which has to be set explicitly. Initially,

            don't display flashContent div so it won't show if JavaScript disabled.

            -->

             

            <style type="text/css" media="screen">

             

            html, body { height:100%; }

             

            body { margin:0; padding:0; overflow:auto; text-align:center;

             

            background-color: #ffffff; }

             

            #flashContent { display:none; }

             

            </style>

             

             

            <!-- Enable Browser History by replacing useBrowserHistory tokens with two hyphens -->

             

            <!-- BEGIN Browser History required section >

            <link rel="stylesheet" type="text/css" href="history/history.css" />

            <script type="text/javascript" src="history/history.js"></script>

            <! END Browser History required section -->

             

             

             

            <script type="text/javascript" src="swfobject.js"></script>

             

            <script type="text/javascript">

             

            function LogInToArray(ipAddr,username,password)

            {

            alert(

            "Hi there, IP ADDRESS: " + ipAddr + " Username :" + username + " Password :" + password);

            }

             

            </script>

             

            <script type="text/javascript">

            <!-- For version detection,

            set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection. -->

             

            var swfVersionStr = "10.0.0";

            <!-- To

            use express install, set to playerProductInstall.swf, otherwise the empty string. -->

             

            var xiSwfUrlStr = "playerProductInstall.swf";

             

            var flashvars = {};

             

            var params = {};

            params.quality =

            "high";

            params.bgcolor =

            "#ffffff";

            params.allowscriptaccess =

            "*";

            params.allowfullscreen =

            "true";

             

            var attributes = {};

            attributes.id =

            "MSAPerMonWebClient";

            attributes.name =

            "MSAPerMonWebClient";

            attributes.align =

            "middle";

            swfobject.embedSWF(

             

            "MSAPerMonWebClient.swf", "flashContent",

             

            "100%", "100%",

            swfVersionStr, xiSwfUrlStr,

            flashvars, params, attributes);

            <!-- JavaScript enabled so display the flashContent div

            in case it is not replaced with a swf object. -->

            swfobject.createCSS(

            "#flashContent", "display:block;text-align:left;");

             

            </script>

             

            </head>

             

            <body>

             

            <!-- SWFObject's dynamic embed method replaces this alternative HTML content with Flash content when enough

            JavaScript and Flash plug-in support is available. The div is initially hidden so that it doesn't show

            when JavaScript is disabled.

            -->

             

             

            <div id="flashContent">

             

            <p>

            To view this page ensure that Adobe Flash Player version

            10.0.0 or greater is installed.

             

            </p>

             

            <script type="text/javascript">

             

            var pageHost = ((document.location.protocol == "https:") ? "https://" : "http://");

            document.write(

            "<a href='http://www.adobe.com/go/getflashplayer'><img src='"

            + pageHost +

            "www.adobe.com/images/shared/download_buttons/get_flash_player.gif' alt='Get Adobe Flash player' /></a>" );

             

            </script>

             

            </div>

             

             

            <noscript>

             

            <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%" id="MSAPerMonWebClient">

             

            <param name="movie" value="MSAPerMonWebClient.swf" />

             

            <param name="quality" value="high" />

             

            <param name="bgcolor" value="#ffffff" />

             

            <param name="allowScriptAccess" value="*" />

             

            <param name="allowFullScreen" value="true" />

             

            <!--[if !IE]>-->

             

            <object type="application/x-shockwave-flash" data="MSAPerMonWebClient.swf" width="100%" height="100%">

             

            <param name="quality" value="high" />

             

            <param name="bgcolor" value="#ffffff" />

             

            <param name="allowScriptAccess" value="*" />

             

            <param name="allowFullScreen" value="true" />

             

            <!--<![endif]-->

             

            <!--[if gte IE 6]>-->

             

            <p>

            Either scripts and active content are not permitted to run or Adobe Flash Player version

            10.0.0 or greater is not installed.

             

            </p>

             

            <!--<![endif]-->

             

            <a href="http://www.adobe.com/go/getflashplayer">

             

            <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash Player" />

             

            </a>

             

            <!--[if !IE]>-->

             

            </object>

             

            <!--<![endif]-->

             

            </object>

             

            </noscript>

             

            </body>

            </

             

            html>

            • 3. Re: Calling JavaScript function from Flex 4 web application
              Chandra2034 Level 1

              Actually it's a security issue. When I run my application in release build I am getting following error :

               

              SecurityError: Error #2060: Security sandbox violation: ExternalInterface caller file:///C:/Chandra/MSAPerfWebClient/bin-release/MSAPerfWebClient.swf cannot access file:///C:/Chandra/MSAPerfWebClient/bin-release/MSAPerfWebClient.html.
              at flash.external::ExternalInterface$/_initJS()
              at flash.external::ExternalInterface$/call()
              at MSAPerfWebClient/btnLogin_click()
              at MSAPerfWebClient/__btnLogin_click()

              I changed "params.allowscriptaccess = "always" in html file still getting same error.  Can someone point me reason for error ?

              • 4. Re: Calling JavaScript function from Flex 4 web application
                Chandra2034 Level 1

                Final Solution to this problem :

                Setting to run application

                It’s an one time activity on each system. As of now it’s a work around.

                Step 1: Run following link:

                http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.htm l

                 

                Step 2: Click on Edit location >> Click on Add Location.

                 

                Step 3: Click on “Browse for folder” and select the drive (Example C:\) from where you are running the application.

                Step 4: Press “Confirm”  button. It will show you your selected location.