Zur Navigation

Prüfen, ob Javascript aktiviert ist

"Gegenteil" von noscript

1 Tilman

Hallo!

Ich möchte auf meiner Webseite einen Link, bei dem, wenn man drauf klickt, der Browser (funktioniert nur bei IE) die Seite als Startseite nimmt.

Dafür habe ich folgenden Script:
var homepage = "http://www.meineseite.de/";
function vareside (){
if ((navigator.userAgent.indexOf("Opera") == -1) && (navigator.appName.indexOf("Explorer") != -1)) {	
	document.body.style.behavior='url(#default#homepage)';
	document.body.setHomePage( homepage );
	}
else if (navigator.userAgent.indexOf("Firefox") != -1) {
window.location.href="http://www.meineseite.de/tools/startseite.php?browser=firefox";
}
else {
window.location.href="http://www.meineseite.de/tools/startseite.php";
}
}

Im HTML-Code würde ich das dann gerne so machen, wobei ... durch den Code ersetzt werden soll, mit dem geprüft wird, ob JavaScript aktiviert ist:
<...><a href="javascript:vareside();">als Startseite festlegen</a></...>
<noscript><a href="...">als Startseite festlegen</a></noscript>

01.11.2008 19:02

2 Rudy

Schreib den Link mit Javascript raus (document.write, document.getElementById(...).innerHTML=...). Ist JS nicht aktiv, kein Link...

01.11.2008 19:31

3 Tilman

Sorry, aber in JavaScript bin ich momentan (noch) Anfänger ;-)

Könntest du mir das Grundgerüst zeigen?

01.11.2008 21:11

4 Rudy

Dort, wo Du willst, dass der IE den Link anzeigt:

<!--[if IE]>
<script type="text/javascript">
document.write('<a href="javascript:addfavorite()">Zu den Favoriten hinzufügen</a>');
</script>
<![endif]x-->


NB: die Browserprüfung wird hier mit Conditional Comments durchgeführt. Ist mE der sauberere Weg.

01.11.2008 21:56 | geändert: 01.11.2008 21:58

5 Tilman

Danke! Ist genau so, wie ich es haben wollte!

03.11.2008 09:41

6 Gabi

Hallo,

Ich habe dementsprechend bei mir mal folgendes versucht einzubauen:

<script type="text/javascript">
document.write('<p class="small">Google-Anzeige</p>');
</script>

Darauf meldet der Validator folgenden Fehler:
Errors found [...]
Line 87, Column 50: end tag for element "P" which is not open.
document.write("<p class='small'>Google-Anzeige</p>");

Kann man das auch irgendwie anders machen, sodass auch der Validator zufrieden ist?

Gruß Gabi

09.12.2008 17:24

7 Jörg

document.write kann in validem XHTML nicht mehr verwendet werden. Probier's mal so:

<p id="addfavorite"></p>
<!--[if IE]>
<script type="text/javascript">
document.getElementById("addfavorite").innerHTML = '<a href="javascript:addfavorite()">Zu den Favoriten hinzufügen</a>';
</script>
<![endif]x-->

09.12.2008 17:57 | geändert: 09.12.2008 18:01

8 Gabi

Juhu, damit geht es! Vielen Dank! :-)

LG Gabi

09.12.2008 19:58

9 Rudy

Javascript-Blöcke in XHTML sollten immer in CDATA eingeschlossen sein, damit sie validieren:

<script type="text/javascript">
/* <![CDATA[ */
document.write('<p class="small">Google-Anzeige</p>');
/* ]]> */
</script>

An document.write selbst liegt das nicht. Mit CCs siehts halt nur der IE, was bei Google-Anzeigen aber auch nicht verkehrt ist :)

09.12.2008 20:59

10 Jörg

Ja, die CDATA-Markierung muss hier verwendet werden wegen den Steuerzeichen im Script.

Aber document.write hat eigentlich auch nichts in XHTML verloren

Does document.write work in XHTML?

No. Because of the way XML is defined, it is not possible to do tricks like this, where markup is generated by scripting while the parser is still parsing the markup.

You can still achieve the same effects, but you have to do it by using the DOM to add and delete elements.

Quelle: http://www.w3.org/MarkUp/2004/xhtml-faq#docwrite

Es funktioniert halt solange, wie man XHTML wegen Rückwärtskompatibilität als "text/html" ausliefert - aber sobald man den Mime-Type ändert auf "application/xhtml+xml", wird das document.write nicht mehr ausgeführt.

09.12.2008 21:38 | geändert: 09.12.2008 21:40