Страница 1 из 2
HTMLLoader переход на другой сайт
Добавлено: 27 сен 2012, 00:36
Kavis
Собсвтвенно загружаю сайт в пределах него ссылки все работают, но перейти по ссылке которая ссылается на другой домен не выходит, в чем может быть дело ?
вот код
Код: Выделить всё
import flash.display.Sprite; import flash.html.HTMLLoader; import flash.net.URLRequest; var html:HTMLLoader = new HTMLLoader(); var urlReq:URLRequest = new URLRequest("http://comicsall.com/"); html.width = stage.stageWidth; html.height = stage.stageHeight; html.load(urlReq); addChild(html);
Re: HTMLLoader переход на другой сайт
Добавлено: 27 сен 2012, 02:13
sanych_dv
На другой домен можно перейти, невозможно перейти по ссылке в новом окне (target = "_blank").
Решение:
1. создаем субкласс NewHTMLHost.as
Код: Выделить всё
package{ import flash.events.Event; import flash.html.HTMLHost; import flash.html.HTMLWindowCreateOptions; import flash.html.HTMLLoader; public class NewHTMLHost extends HTMLHost { public function NewHTMLHost(defaultBehaviors:Boolean = true) { super(defaultBehaviors); } override public function createWindow(windowCreateOptions:HTMLWindowCreateOptions):HTMLLoader { var htmlLoader:HTMLLoader = super.createWindow(new HTMLWindowCreateOptions); htmlLoader.addEventListener(Event.LOCATION_CHANGE, function(e:Event):void { }); return htmlLoader; } } }
2. Привязываем к HTMLLoader наш HTMLHost:
Код: Выделить всё
package{ import flash.display.Sprite; import flash.html.HTMLLoader; import flash.net.URLRequest; public class Main extends Sprite { public function Main():void { var html:HTMLLoader = new HTMLLoader(); var urlReq:URLRequest = new URLRequest("http://yandex.ru/"); html.htmlHost = new NewHTMLHost; html.width = stage.stageWidth; html.height = stage.stageHeight; html.load(urlReq); addChild(html); } } }
3. Ссылки открываются в новом окне.
Re: HTMLLoader переход на другой сайт
Добавлено: 27 сен 2012, 08:32
Kavis
sanych_dv, огромное спасибо, у меня уже вчера ночью начали проскальзывать мысли, что это из-за ссылок в новом окне, но у же голова не работала.
Re: HTMLLoader переход на другой сайт
Добавлено: 27 сен 2012, 08:35
Kavis
Кстати, а чем отличается StageWebView от HTMLLoader ?
Re: HTMLLoader переход на другой сайт
Добавлено: 27 сен 2012, 09:15
sanych_dv
Kavis
StageWebView - упрощенный вариант HTMLLoader с ограниченным взаимодействием между AS3 и JavaScript. Некоторые устройства не поддерживают HTMLLoader, а для поддержки StageWebView используют системные модули.
Re: HTMLLoader переход на другой сайт
Добавлено: 27 сен 2012, 09:59
Kavis
Получается если я для Андройда буду делать, то лучше воспользоваться StageWebView
Re: HTMLLoader переход на другой сайт
Добавлено: 27 сен 2012, 14:36
sanych_dv
Проверяйте свойства:
StageWebView.isSupported
HTMLLoader.isSupported
Re: HTMLLoader переход на другой сайт
Добавлено: 04 окт 2012, 22:22
Kavis
sanych_dv,
Решил я все таки использовать StageWebView, и побоыстрому переписал NewHTMLHost в NewStageWebView.as
Но компилятор ругается
D:\ProektS\Android\site_for_Android\com\my\NewStageWebView.as, строка 10 1016: Базовый класс является окончательным.
D:\ProektS\Android\site_for_Android\com\my\NewStageWebView.as, строка 17 1020: Метод, который помечен на переопределение, должен переопределять другой метод.
Сам код
Код: Выделить всё
package com.my{ import flash.events.Event; import flash.html.*; import flash.media.StageWebView; import flash.events.Event; public class NewStageWebView extends StageWebView { public function NewStageWebView(defaultBehaviors:Boolean = true) { super(defaultBehaviors); } override public function createWindow(windowCreateOptions:HTMLWindowCreateOptions):StageWebView { var StageWeb:StageWebView = super.createWindow(new HTMLWindowCreateOptions); StageWeb.addEventListener(Event.LOCATION_CHANGE, function(e:Event):void { }); return StageWeb; } } }
Как в таком случае выкручиваться ?
Re: HTMLLoader переход на другой сайт
Добавлено: 05 окт 2012, 01:10
sanych_dv
StageWebView вы не расширите, это final class.
Можно сделать такой костыль:
Код: Выделить всё
private var urlLoader:URLLoader; private var webView:StageWebView; // ... // создаем URLLoader и webView urlLoader = new URLLoader; urlLoader.addEventListener(Event.COMPLETE, onURLLoaderComplete); urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onUrlLoaderIOError); urlLoad("http://yandex.ru/yandsearch?text=flash&lr=76"); webView = new StageWebView; webView.stage = this.stage; webView.viewPort = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight); webView.addEventListener(Event.COMPLETE, onWebViewComplete); webView.addEventListener(Event.LOCATION_CHANGE, onLocationChange); webView.addEventListener(ErrorEvent.ERROR, onWebViewError); private function urlLoad(urlString:String):void { urlLoader.load(new URLRequest (urlString) ); } private function onURLLoaderComplete(e:Event):void { // получаем HTML в строку var str:String = URLLoader(e.currentTarget).data; // парсим HTML на предмет ссылок с target=_blank и переписываем на _self (или удаляем таргеты) // к примеру.... var myPattern:RegExp = /target="_blank"/gi; str = str.replace(myPattern, 'target="_self"'); // Создаем webView и загружаем в webView поправленный HTML webView.loadString(str); } private function onWebViewComplete(e:Event):void { //trace( StageWebView(e.currentTarget).title ) } private function onLocationChange(e:Event):void { // location бывает странным :)) trace(e.currentTarget.location); // по ссылке загружаем новый url через UrlLoader urlLoad ("http:" + e.currentTarget.location) } private function onUrlLoaderIOError(e:IOErrorEvent):void { trace(e.errorID, e.text); } private function onWebViewError(e:ErrorEvent):void { trace(e.errorID, e.text); }
Re: HTMLLoader переход на другой сайт
Добавлено: 05 окт 2012, 01:47
Kavis
sanych_dv ,
Не прокатил этот код, у яндекса кнопка не работает, и ошибки идут в отладку, похоже в HTML стирается что-то еще, я вот думаю может можно, как то отследить, что нажали по ссылке, которая открывается в новом окне и загрузить эту ссылку через stageWebView.loadURL, но тут даже если пытаться просто ссылку выдернуть, и то не получается, LocationChangeEvent не реагирует на ссылки которые в новом окне.....
