Opening an HTML popup from Flash, not as tab
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).
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');
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
<?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>
