Erstmal Moin!
Geht nicht?
Geht doch!!!
Diese Seite kann man durch den Validator bei http://www.w3.org/ jagen und bekommt ein valides XHTML Frameset...
Bei der Validität geht es keinesfalls darum, vom Validator ein OK zu kriegen, sondern darum, ordentlichen (X)HTML-Code zu produzieren - egal, mit welchen Mitteln.
Dein Trick ist Betrug und zählt nicht.
Angenommen, in einer Welt würde es Regeln für gültige Briefe und Briefumschläge geben. Dann hättest du einen gültigen Briefumschlag - der Inhalt des Umschlags wird aber garnicht geprüft, obwohl der enthaltene Brief ungültig ist. Du darfst dich deshalb nicht wundern, wenn dein Brief bei manchem Leser auf Unverständnis stößt. Hättest du gleich den Brief auf Gültigkeit prüfen lassen und erst dann in den Umschlag gesteckt, würde sowas nicht passieren.
Abgesehen davon hat dein Trick zwei Fehler - einen grundsätzlichen, und einen praktischen:
1. Grundsätzlich ist es immer sehr problematisch, wenn man sich relevante Teile einer Seite per Javascript erstellen läßt. Das kann ins Auge gehen und setzt nur unnötig die Anforderungen an den User-Agent hoch. Es gibt Leute, die Javascript ausgeschaltet haben. Und es ist anzustreben, eine Seite möglichst ohne Javascript funktionieren zu lassen, wenn auch nicht mit den letzten optischen Features.
2. Ganz praktisch gesehen erzeugt deine Lösung falsches HTML. Du schreibst das JS-Frameset noch innerhalb vom <HEAD> - da gehört es aber absolut nicht hin. Dummerweise kann das kein Validator bemerken - außer man kopiert den entstandenen Quelltext aus der Netscape-Quelltextansicht und läßt diesen validieren. Ich möchte nicht wissen, was da dann gemeckert wird.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html>
<head>
<title>Dark Eagle Software</title>
<meta http-equiv="content-type" content="mime-type; charset=iso-8859-1"/>
<script type="text/javascript">
<!--
if (top!=self) top.location = self.location;
document.write(unescape("*Hier den eigentlichen Framesetsource*"));
//-->
</script>
</head>
<frameset rows="*,*">
<frame />
<frame/>
<noframes><body>nix</body></noframes>
</frameset>
</html>
»»
Ganz grundsätzlich ist festzuhalten:
1. Tricks in Javascript, die Validität vortäuschen, sind dumm, weil sie Fehler maskieren, die schwerwiegend sein können.
2. Es ist allgemein anerkannt, daß man funktionierende und ordentlich aussehende Framesetdefinitionen nicht valide machen kann, weil die Browser andere, unerlaubte Angaben erfordern als der Standard vorsieht. Ein Tricksen in dieser Richtung ist deshalb vollkommen überflüssig.
- Sven Rautenberg