JavaScript přesměrování a window.open

Jednou ze sladkých částí ve zjednodušené specifikaci HTML5 bylo povolení A prvky k zalomení DIV s a další prvky na úrovni bloku. Příliš dlouho jsme přidávali posluchače JavaScriptu a window.location přesměruje při zabalení A by asi stačilo. Jsou však také případy, kdy je obal A by nefungovalo – například blok s A prvky, které jsou již v něm obsaženy – chcete jen, aby kliknutí na cokoli jiného v rámci nadřazeného prvku přistála na daném místě.

Samozřejmě by fungoval takový základní posluchač:

someElement.addEventListener('click', function(e) {
	// not important what the URL is but assume it's available on
	// the element in a `data-src` attribute
	window.location = someElement.get('data-url');
});

...ale podlehlo by jednomu z mých největších mazlíků: COMMAND+CLICK vytvoření bloku a otevření odkazu ve stejném okně. Čím blíže můžeme vlastní kódované bloky přiblížit nativním funkcím prohlížeče, tím lépe. Udělejte si tedy chvilku a opravte zpětná volání posluchače událostí:

someElement.addEventListener('click', function(e) {
	var url = someElement.get('data-url');

	if(e.metaKey || e.ctrlKey || e.button === 1) {
		window.open(url);
	}
	else {
		window.location = url;
	}
});

Implementoval jsem to na svůj blog a mám to na paměti pokaždé, když použiji window.location přesměrovat. Je to minimální přírůstek kódu, ale zásadní zlepšení použitelnosti!