PDA

Pogčedajte punu verziju : Otvaranje prozora u ultrastinktnom (application/xhtml+xml) modu


bojan_bozovic
31. 03. 2006., 18:27
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:


<?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.