über mich

Hallo, mein Name ist Heiko Dreyer. Ich arbeite freiberuflich als Webdesigner und Entwickler mit Schwerpunkt Flash/Flex, PHP und Cocoa Touch.

Brauchen Sie Hilfe bei Ihrem Webdesign oder suchen Sie einen Entwickler? Ich stehe Ihnen jederzeit mit meinen Fähigkeiten zur Verfügung.

über boxedfolder

Mein Blog bieten Überblick über sämtliche Neuigkeiten und Workflows mit denen ich mich beschäftige.

Aktuell bin ich vermehrt im Bereich Webentwicklung, sprich Flash/Flex und PHP tätig. Darüber hinaus blogge ich auch über Anwendungsentwicklung mit AIR für den Desktop und Cocoa Touch für die Mobile Plattform.

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:

URLNavigator.as:

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

14. Dezember 2009 (12:21 Uhr) - flash & flex, jquery & javascript, web nach oben

Bookmarks »


  • del.icio.us
  • Digg
  • Technorati
  • MisterWong.DE
  • Furl
  • Facebook
  • Live
  • Google
  • Sphinn
  • Mixx
  • NewsVine
  • BlinkList
  • co.mments
  • YahooMyWeb
  • Spurl
  • blogtercimlap
  • blogmarks
  • StumbleUpon
  • Ma.gnolia


0 Kommentare »