navigateToUrl und Popup-Blocker
Vielleicht wird der Eine oder Andere das leidige Thema navigateToUrl und Popup-Blocker schmerzlich selber erlebt haben. Denn einige mehr oder weniger moderne Browser, wie der Internet Explorer 8, meinen einfach alles blockieren zu müssen was nicht im Fenster “_self” aufgerufen wird. Das gilt auch wenn kein weiteres Argument angegeben wird, also z.B. auch navigateToURL(“http://www.google.de”).
Eine gute Methode um dieses Verhalten auszuhebeln, ist es, die Javascript Schnittstelle des Browsers anzusprechen und dementsprechend ein neues Fenster zu generieren. In diesem Zusammenhang kann ich auf eine tolle und kompakte Klasse verweisen, die genau das tut:
package com.zorked {
import flash.external.ExternalInterface;
import flash.net.*;
public class URLNavigator {
/**
* Utility function to wrap up changing pages. Avoids over-aggressive popup blockers.
* @param url The URL to change to. Either a String or a URLRequest
* @param window The target browser window/tab, generally _self, _top, or _blank
* @usage URLNavigator.ChangePage("http://www.google.com", "_blank");
*/
public static function ChangePage(url:*, window:String = "_self"):void {
var req:URLRequest = url is String ? new URLRequest(url) : url;
if (!ExternalInterface.available) {
navigateToURL(req, window);
} else {
var strUserAgent:String = String(ExternalInterface.call("function() {return navigator.userAgent;}")).toLowerCase();
if (strUserAgent.indexOf("firefox") != -1 || (strUserAgent.indexOf("msie") != -1 && uint(strUserAgent.substr(strUserAgent.indexOf("msie") + 5, 3)) >= 7)) {
ExternalInterface.call("window.open", req.url, window);
} else {
navigateToURL(req, window);
}
}
}
}
}
Was wird hier gemacht? Nun im Prinzip macht die Klasse einen Check ob es sich um gewisse Browser-Versionen handelt und führt dementsprechend einen normalen navigateToURL-Request aus, oder er ruft die Javascript Methode window.open() auf. Man ist im Grunde auf der sicheren Seite und gegen die Popup-Blocker Schikane einiger Browser gut gerüstet.
Link zum Artikel






















