Pogledajte određenu poruku
Staro 31. 03. 2006.   #1
bojan_bozovic
expert
Master
 
Avatar bojan_bozovic
 
Datum učlanjenja: 20.12.2005
Poruke: 730
Hvala: 0
0 "Hvala" u 0 poruka
bojan_bozovic is on a distinguished road
Default Otvaranje prozora u ultrastinktnom (application/xhtml+xml) modu

Nesto se zezam na lokalnom Apache sa striktnim serviranjem XHTML (mora za mobilni uredjaj tako) i morao sam malo da modifikujem metodu Petra Marica za otvaranje linka u novom prozoru, koja nije dobra za striktni XHTML:

Kôd:
<?php 
header("Content-Type:application/xhtml+xml");
echo"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"; /* php short tags sux */ ?>
<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <head>
  <title>Popup</title>

<script type="text/javascript">
<![CDATA[ // Ne zaboravite CDATA komentar da ne dobijete XML parsing error
var global_isdom = (document.getElementById) ? true : false;
function addevent(obj, evType, fn, useCapture) {
	if (obj.addEventListener) { //W3C DOM, Opera 7
		obj.addEventListener(evType, fn, useCapture);
		return true;
	} else if (obj.attachEvent) { //MSIE 5, Opera 7
		var r = obj.attachEvent("on"+evType, fn);
		return r;
	} else {
		return false; //MSIE 5 Mac, old browsers (do nothing)
	}
}

function onclicklistener(e) {
	var evt=e,newwindow;
	evt.returnValue=false; //MSIE 5
	if(typeof(e)!='object')evt=event;
	var tg = (evt.target) ? evt.target : evt.srcElement;
	newwindow=window.open(tg,'newwindow');
	evt.preventDefault(); //W3C DOM
	
}
function replaceexternallinks(){
	var links=document.getElementsByTagName('a');
	for(i=0;i<links.length;i++){
		if(links[i].className.match(/\bexternal\b/)){
			addevent(links[i],"click",onclicklistener,false);
		}
	}
}
if (global_isdom) addevent(window,"load",replaceexternallinks,false);
]]>
</script>
<body>
<div id="content">
<a class="external" href="http://www.google.com">Google</a>
</div>
</body>
</html>
Dakle, u ultrastriktnom modu js ne moze menjati atribut target u nesto sto nije u XHTML Strict, ili document.write pisati ili ubacivati nepostojece tagove. Primetio sam da novi klijenti (Opera 8.5, FF 1.5) potpuno ignorisu ovo i omogucavaju HTML tagsoup u XHTML serviranom kao application/xhtml+xml (provericu za application/xml i text/xml, pa cu da editujem) za razliku od dobrih klijenata npr. Netscape 7.2 (Gecko 1.7.2). Zasto? Ispasce da cemo u XHTML 2 imati i marquee tag.

Poslednja izmena od bojan_bozovic : 31. 03. 2006. u 18:35.
bojan_bozovic je offline   Odgovorite uz citat