Flex从iframe POST导航到URL



让我现在解释一下我当前的问题:

我有一个位于域a的网络应用程序。让我们称之为a-App。我从A-App打开一个iframe,它指向域B上的Flex应用程序。我们将称之为B-FlexApp。B-FlexApp想要将一些数据发布到位于同一域的另一个应用程序,我们称之为B-app。问题是,在IE中,当B-FlexApp在iframe中打开时,B-FlexApp和B-App之间的通信中断。这种情况只发生在IE中。

然而,当在新窗口中打开B-FlexApp时,将数据发布到B-App就可以了。如何克服这一点?无法删除iframe。

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);
}

希望它能有所帮助!

最好让浏览器实际执行"导航到URL"功能,而不是Flex。

例如,在包含Flex应用程序的页面中,该页面将包含一个Javascript函数调用handleNavigationRequest(pageName,target)。在Flex应用程序中,您可以使用ExternalInterface,并调用handleNavigationRequest。

通过使用这种范式,Flex应用程序将不必了解外部实现(如框架设置等)的细节,最终将获得更干净、耦合更少的设计。

我发现我可以使用swfObject来嵌入flash对象,因此iframe实现完全无用。将flash组件嵌入覆盖中,而不是在iframe中打开它,可以使IE正常工作。

我遇到了同样的问题,我只需将第二个参数(浏览器窗口)传递给函数即可解决:navigateToUrl(url,"_blank");,在我的情况下,我使用"_blank"

它适用于IE8和IE9。

Davide

相关内容

  • 没有找到相关文章

最新更新