让我现在解释一下我目前的问题:
我有一个位于域A的网络应用程序。我们称之为A-App。我从A-App打开一个指向域B上的Flex应用程序的iframe。我们称之为B-FlexApp。 B-FlexApp想要将一些数据发布到位于同一域的另一个应用程序,我们称之为B-App。问题是在IE中,当在iframe中打开B-FlexApp时,通信在B-FlexApp和B-App之间中断。这只发生在IE中。
但是,在新窗口中打开B-FlexApp时,将数据发布到B-App工作正常。怎么克服这个?删除iframe是不可能的。
答案 0 :(得分:0)
AS3 navigateToURL和IE存在问题。你可以尝试调用javascript来导航:我有一个小实用程序类来处理这个:
//class URLUtil
package com
{
import flash.external.*;
import flash.net.*;
public class URLUtil extends Object
{
protected static const WINDOW_OPEN_FUNCTION:String="window.open";
public function URLUtil()
{
super();
return;
}
public static function openWindow(arg1:String = "", arg2:String="_blank", arg3:String=""):void
{
var browserName:String = getBrowserName();
switch (browserName)
{
case "Firefox":
{
flash.external.ExternalInterface.call(WINDOW_OPEN_FUNCTION, arg1, arg2, arg3);
break;
}
case "IE":
{
flash.external.ExternalInterface.call("function setWMWindow() {window.open(\'" + arg1 + "\');}");
break;
}
case "Safari":
case "Opera":
{
flash.net.navigateToURL(new URLRequest(arg1), arg2);
break;
}
default:
{
flash.net.navigateToURL(new URLRequest(arg1), arg2);
break;
}
}
return;
}
private static function getBrowserName():String
{
var str:String="";
var browserName:String = ExternalInterface.call("function getBrowser(){return navigator.userAgent;}");
if (!(browserName == null) && browserName.indexOf("Firefox") >= 0)
{
str = "Firefox";
}
else
{
if (!(browserName == null) && browserName.indexOf("Safari") >= 0)
{
str = "Safari";
}
else
{
if (!(browserName == null) && browserName.indexOf("MSIE") >= 0)
{
str = "IE";
}
else
{
if (!(browserName == null) && browserName.indexOf("Opera") >= 0)
{
str = "Opera";
}
else
{
str = "Undefined";
}
}
}
}
trace("Browser: \t" + str);
return str;
}
}
}
你称之为:
btn.addEventListener(MouseEvent.CLICK, onBTNClick);
function onBTNClick(evt:MouseEvent):void
{
URLUtil.openWindow(YOUR_URL_STRING);
}
希望它有所帮助!
答案 1 :(得分:0)
最好让浏览器实际执行“导航到URL”功能而不是Flex。
例如,在包含Flex应用程序的页面中,该页面将包含一个Javascript函数调用handleNavigationRequest(pageName,target)。在Flex应用程序中,您可以使用ExternalInterface,并调用handleNavigationRequest。
通过使用这个范例,Flex应用程序不必详细说明外部实现(如框架设置等)的详细信息,并且最终会得到更清晰,更少耦合的设计。
答案 2 :(得分:0)
我发现我可以使用swfObject来嵌入flash对象,因此iframe实现完全没用。将Flash组件嵌入到叠加层中,而不是在iframe中打开它,使IE表现正常。
答案 3 :(得分:0)
我有同样的问题,我解决了它只是将第二个参数(浏览器窗口)传递给函数:
navigateToUrl(url,"_blank");
,在我的情况下,我使用"_blank"
。
适用于IE8和IE9。
的Davide