0

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

我有一个位于域 A 的 webapp。我们称之为 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 是不可能的。

4

4 回答 4

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

希望能帮助到你!

于 2012-07-12T21:05:59.457 回答
0

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

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

通过使用这种范例,Flex 应用程序将不必考虑外部实现(如框架设置等)的细节,并且您最终会获得更简洁且耦合更少的设计。

于 2012-07-12T22:02:57.060 回答
0

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

于 2012-07-15T11:22:48.550 回答
0

我有同样的问题,我解决了它简单地将第二个参数(浏览器窗口)传递给函数: navigateToUrl(url,"_blank");,在我的例子中,我使用"_blank".

它适用于 IE8 和 IE9。

戴维德

于 2013-02-06T11:50:34.327 回答