2012-06-27 5 views
1

У меня есть веб-проект, разработанный в Flex, который я должен сделать автономным с использованием AIR.AIR HTMLLoader window.open не работает

Я создал проект Air и загрузил веб-приложение, используя flash.html.HTMLLoader. Содержимое загружается штрафом и работой.

Существует несколько кнопок, которые открывают разные ссылки, используя функции javascript window.open.

Ссылки не открываются. Функция javascript вызывается с использованием ExternalInterface, и я размещал предупреждения в отображаемом.

Функция содержит простой window.open

window.open("http://www.google.co.in","Google"); 

Я попробовал несколько решений, упомянутых, но ни один из них не работают.

http://digitaldumptruck.jotabout.com/?p=672 
http://soenkerohde.com/2008/09/air-html-with-_blank-links/ 
http://cookbooks.adobe.com/index.cfm?event=showdetails&postId=9243 

Я даже попытался загружая простую страницу в HTMLLoader компонента с window.open метода еще не работает. При нажатии кнопки только предупреждение работает, но window.open не открывает ссылку.

<html> 
<head> 
<title>Test</title> 
<body scroll="no"> 
<input type="button" value="Click" onClick="window.open('http://www.google.co.in');"> 
</body> 
</html> 

Может кто-нибудь помочь мне, пожалуйста

+0

Вы пытаетесь заставить его всплыть в новом окне? Ожидаете ли вы создать новый компонент HTML или запустить его с помощью собственного браузера? Кроме того, попробуйте 'window.open ('http: //google.com'''self')' просто, чтобы убедиться, что это не проблема безопасности. Компонент HTML для AIR - довольно чувствительная среда. – merv

ответ

0

среда AIR Webkit весьма ограничительный в поддержку метода window.open. См. Документацию Adobe по адресу Restrictions on calling the JavaScript window.open() method.

Самый простой способ справиться с этим - просто позволить браузеру по умолчанию открывать ссылки. Adobe documents this very question, и показывает, как вы можете поп открыть ссылку изнутри AIR:

var url = "http://www.adobe.com"; 
var urlReq = new air.URLRequest(url); 
air.navigateToURL(urlReq); 

Обобщая это:

function openExternalLink(href:String):void { 
    var urlReq = new air.URLRequest(href); 
    air.navigateToURL(urlReq); 
} 

Один из вариантов: Предположим, что вы работаете JQuery на странице, вы можете иметь все ссылки открыть наружно так:

var html:HTMLLoader = new HTMLLoader(); 
var urlReq:URLRequest = new URLRequest("whatever.html"); 
html.load(urlReq); 
html.addEventListener(Event.COMPLETE, 
    function completeHandler(event:Event):void { 
    html.window.jQuery('a').click(clickHandler); 
    }); 

function clickHandler(e:Object):void { 
    if (e.target && e.target.href) { 
    openExternalLink(e.target.href); 
    } 
    e.preventDefault(); 
} 

более подробную информацию о работе с DOM событий в ActionScript см relevant Adobe Documentation.

Ничего из этого не проверено, но, надеюсь, оно дает приблизительный контур.


В противном случае, если вы пытаетесь сделать что-то фантазии, как всплывающие окна AIR с HTMLLoader кадров в них, я нашел один пост в блоге обсуждали, что: Opening links in AIR’s HTML loader

+0

Hi frnds, Большое спасибо за ваши ответы. Проблема немного отличается, поскольку вызов window.open находится в файле javascript. Flash swf вызывает функцию Javascript, которая открывает ссылку. Вызов window.open терпит неудачу для локальных/удаленных файлов. Я пробовал navigateToURL, который работает, но это потребует нескольких изменений в приложении. Есть ли какое-либо решение конкретной проблемы. –

+0

@NitinMukesh - Хорошо, это немного усложняет работу, поскольку похоже, что у вас нет возможности искать DOM для элементов, которые используют вызовы 'window.open'. Я собираюсь опубликовать второй ответ, как возможную альтернативу. – merv

0

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

Переопределение window.open метод сам

Как и прежде, ждать, пока Event.COMPLETE не обжигают, а затем взять его оттуда:

var html:HTMLLoader = new HTMLLoader(); 
var urlReq:URLRequest = new URLRequest("whatever.html"); 
var oldWindowOpen:Object; // save it, just in case 

html.load(urlReq); 

html.addEventListener(Event.COMPLETE, 
    function (event:Event):void { 
    oldWindowOpen = html.window.open; 

    html.window.open = asWindowOpen; 
    }); 

function asWindowOpen(href:String, name:String="_blank", specs:Object=null, replace:Object=null):void { 
    var urlReq = new air.URLRequest(href); 
    air.navigateToURL(urlReq); 
} 

Вы, вероятно, следует заполнить некоторые функции, чтобы обрабатывать другие входы, как указано в W3Schools Reference for Window open() Method. Вам может потребоваться (или хотеть) изменить все типы параметров на Object, чтобы быть в безопасности, поскольку, в отличие от взаимодействий ExternalInterface, типы JavaScript-ActionScript не автоматически отображаются при обмене AIR-WebKit автоматически.

Смежные вопросы