8 Replies Latest reply on Jul 8, 2010 5:09 AM by tobi3

    Opening an HTML popup from Flash, not as tab

    tobi3 Level 1

      Hi

       

      I need to open an HTML popup from Flash (using ActionScript in
      Flex 4).

       

      Thus far I found a solution, and it does work in Safari - a new
      and separate HTML window is popped up (with a new web page).

       

      private function popUpTheHtmlEditor():void {
        var url:String = "http://www.adobe.com";
        var request:URLRequest = new URLRequest(url);
        try {
          navigateToURL(request, '_blank');
        } catch (e:Error) {
          trace("Error occurred!");
        }
      }

       

      But in (my) Firefox (with my settings), when I click on the Flash
      (Flex) button, the page is being opened in a new tab.

       

      I need a solution which pops up the HTML page in a new/separate
      window, as far as possible regardless of the browser (and browser
      settings).

       

      BTW, this http://apdevblog.com/problems-using-navigatetourl/ doesn't work,
      clicking on either button brings a new tab (instead of a popup).

       

      I found an example where a popup is opened from HTML, and it opens a
      separate window (a real popup) in my Firefox:
      http://www.gtalbot.org/FirefoxSection/Popup/PopupAndFirefox.html
      -> "Open a requested popup"

       

      The JavaScript code seems to be:

       

        OpenRequestedPopup(this.href, this.target); return false;

       

      with this function def:

       

        function OpenRequestedPopup(strUrl, strTarget)
          // ...
          if (WindowObjectReferenceOfRequestedPopup == null || WindowObjectReferenceOfRequestedPopup.closed)
          {
          WindowObjectReferenceOfRequestedPopup = window.open(strUrl, strTarget, "top=" + windowTop + ",left=" + windowLeft + ",width=" + windowWidth + ",height=" + windowHeight + ",menubar,toolbar,location,resizable,scrollbars,status");
          }
          else
          {
          if(WindowObjectReferenceOfRequestedPopup.focus)
            {
            WindowObjectReferenceOfRequestedPopup.focus();
            };
          };
          //...
        }

       

      How could I call such code from ActionScript? Should this work through
      ExternalInterface? I couldn't even get this to work:

       

        ExternalInterface.call('alert', 'foo');

       

      How to get ExternalInterface to work?

       

      Should I use swfobject.js for embedding the .swf in the HTML wrapper?

       

      Any other ideas?

       

      The two files are pasted below.

       

      Here's the compiler command I'm using:

       

        mxmlc -output button.swf -target-player 10.0.0 flash_to_editor.mxml

       

      I'm running the examples locally (as files, not over http). Would it
      help to place the files on a server?

       

      Tobi

       

      (Also posting this here because I use Flex and because it hasn't been solved in the ActionScript forum.)

       

      The files:

       

      <?xml version="1.0" encoding="UTF-8"?>
      <mx:Application
        xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark"
        xmlns:mx="library://ns.adobe.com/flex/mx"
        horizontalAlign="center" verticalAlign="middle">
        <fx:Script>
          <![CDATA[
      
      import mx.controls.Alert;
      import flash.external.ExternalInterface;
      import flash.net.URLRequest;
      
      // This 'http://www.adobe.com' is just an example URL.
      
      // Works but opens tab in FF (not a separate window):
      private function popUpTheHtmlEditor():void {
        var url:String = http://www.adobe.com;
        var request:URLRequest = new URLRequest(url);
        try {
          navigateToURL(request, '_blank');
        } catch (e:Error) {
          trace(Error occurred!);
        }
      }
      
      // Doesn't work:
      // var url:URLRequest = new URLRequest(javascript:alert('foo'); void(0););
      // navigateToURL(url, _self);
      
      /*
      // How to get this to work?
      private function popUpTheHtmlEditor():void {
        ExternalInterface.call('alert', 'foo');
      }
      */
      
      /*
      // How to get this to work?
      private function popUpTheHtmlEditor():void {
        ExternalInterface.call('launch','http://www.adobe.com');
        // Or
        // ExternalInterface.call(window.open, http://www.adobe.com, win, height=200,width=300,toolbar=no,scrollbars=yes);
      }
      */
      
      /*
      // Perhaps it's necessary to try different approaches:
      // (As soon as I get two approaches to work.)
      private function popUpTheHtmlEditor():void {
        var s:String;
        if (ExternalInterface.available) {
          // Necessary? Safe?:
          // Security.allowDomain('*');
          s = ExternalInterface.call('launch','http://www.adobe.com');
        } else {
           // TODO: Then try URLRequest?
           s = Wrapper not available;
        }
        Alert.show(s);
      */
      
          ]]>
        </fx:Script>
        <s:Panel title="One way to open the HTML editor"
        width="75%" height="75%">
          <s:Button id="button" label="Open the HTML editor"
          click="this.popUpTheHtmlEditor();"
          horizontalCenter="0" verticalCenter="0"/>
        </s:Panel>
      </mx:Application>
      

       

      <html
        xmlns="http://www.w3.org/1999/xhtml"
        xml:lang="en" lang="en">
        <head>
          <title>html_around_swf.html</title>
          <script type="text/javascript">
      function launch(url) {
        alert(url);
        //  OpenWin = this.open(url, FOO, toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=no,width=400,height=200);
        //}
      }
          </script>
        </head>
        <body>
          <object id="button" name="button" width="550" height="400"
          classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000">
            <param name="movie" value="button.swf" />
            <param name="allowScriptAccess" value="always" />
            <embed id="foo" name="button" src="button.swf" width="550" height="400"></embed>
          </object>
        </body>
      </html>