MediaWiki Diskussion:Monobook.js

Seiteninhalte werden in anderen Sprachen nicht unterstützt.
Aus Wikiversity

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)[Beantworten]