Разве window.open не работает внутри html-компонента AIR? - PullRequest
2 голосов
/ 15 июня 2010

У меня есть компонент в AIR, например:

<mx:HTML
        id="html"
        width="100%" 
        height="100%" 
        location="https://example.com" 
        locationChange="dispatchLocationChange(event)"
    />

Страница, которую он загружает, содержит это:

<a onclick="alert('onclick')">Alert</a>
<a href="javascript:alert('js')">Alert</a>
<a onclick="window.open('http://www.google.com','_blank')">new window</a>

Оба оповещения работают. однако при нажатии ссылки в новом окне ничего не происходит.

все 3 ссылки работают в реальном браузере, так что я знаю, что все в порядке.

Разве нет поддержки window.open в компоненте AIR HTML? или это ошибка?

Есть ли обходной путь?

Ответы [ 2 ]

2 голосов
/ 16 июня 2010

Я обнаружил, что вам нужно расширить класс HTMLHost и переопределить метод createWindow следующим образом:

override public function createWindow(windowCreateOptions:HTMLWindowCreateOptions):HTMLLoader
{
    var window:Window = new Window();
    window.open();
    window.visible = true;


    window.height = windowCreateOptions.height;
    window.width = windowCreateOptions.width;


    var htmlLoader:FlexHTMLLoader = new FlexHTMLLoader();
    htmlLoader.width = window.width;
    htmlLoader.height = window.height;
    htmlLoader.htmlHost = new MyHTMLHost();

    window.stage.addChild(htmlLoader);

    return htmlLoader;
}

Затем установить этот подкласс как свойство htmlHost для компонента HTML.

Это заставляет его работать.Но в новом всплывающем окне есть странное поведение.Кажется, глючит.

1 голос
/ 16 июня 2010

Попробуйте: navigateInSystemBrowser.

Пример

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:Script>
      <![CDATA[
            private function init():void
            {
                  html.htmlLoader.navigateInSystemBrowser = true;
            }
      ]]>
</mx:Script>
      <mx:HTML location="test.html" id="html" creationComplete="init()"/>
</mx:WindowedApplication>
...