MediaWiki Diskussion:Monobook.js
Interpretation von "script"-Tags innerhalb von "script"-Tags[Bearbeiten]
Mit diesem Eintrag entstanden die Zeilen:
if (document.URL.indexOf("action=edit") > 0 || document.URL.indexOf("action=submit") > 0) {
document.write('<script type="text/javascript" src="/w/index.php?title=MediaWiki:Onlyifediting.js&action=raw&ctype=text/javascript&dontcountme=s"></script>');
}
Der Inhalt von MediaWiki:Monobook.js wird bei jedem Aufruf einer Seite durch folgende URL in den HTML-Code eingefügt:
http://de.wikiversity.org/w/index.php?title=-&action=raw&smaxage=0&gen=js&useskin=monobook
Manche Browser treffen also beim Interpretieren des Script-Bereichs auf das obige </script>
und betrachten den Script-Bereich nunmehr als abgeschlossen.
Dadurch wird der nachfolgende Code nicht mehr interpretiert und eventuell als HTML-Inhalt aufgefasst und führt zu Fehlern in der Seitendarstellung.
Ein einfaches Beispiel zur Überprüfung des Browserverhaltens ist nachstehend aufgeschrieben:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de" dir="ltr">
<head>
<script type="text/javascript">
var counter = 0;
function insert_script(name){
document.write('<script type="text/javascript" src="http://de.wikiversity.org/w/index.php?title='+encodeURIComponent(name)+'&action=raw"></script>');
}
if (document.URL.indexOf("action=edit") > 0 || document.URL.indexOf("action=submit") > 0) {
document.write('<script type="text/javascript" src="/w/index.php?title=MediaWiki:Onlyifediting.js&action=raw&ctype=text/javascript&dontcountme=s"></script>');
}
counter += 1;
alert("Counter="+counter);
</script>
</head>
<body>
<div>Erster Inhalt im Body-Bereich</div>
</body>
</html>
Einige Browser brechen mit der Skript-Interpretation bereits mit Erreichen des ersten </script>-Tag ab und stellen den Rest als HTML-Inhalt dar.
Um dieses Problem zu umgehen, sollten die "script"-Tags entweder durch mehrere String-Folgen zusammengesetzt werden, oder eine andere Schreibweise gewählt werden, zB.:
document.write(decodeURI('%3Cscript type="text/javascript" src="/w/index.php?title=MediaWiki:Onlyifediting.js&action=raw&ctype=text/javascript&dontcountme=s"%3E%3C/script%3E'));
Unabhängig davon ist die URI nicht korrekt kodiert, da der Doppelpunkt in "MediaWiki:Onlyifediting.js" als "%3A" geschrieben werden müsste.
Zusätzlich ist der Parameter "dontcountme=s" (mittlerweile überholt, da seine Nutzung ohnehin nicht konsistent in den diversen Wikis erfolgt.
Somit kann die bereits existierende Funktion import_script(...) genutzt werden. --Exxu 12:17, 15. Aug. 2008 (CEST)