top und prototype

JavaUncle

Mitglied
Hallo Leute

mit document.top... kommt man *immer* in das aller erste Dokument einer Seite mit Frames. Nun habe ich aber einen ganz bösen Sonderfall in dem ich eine Seite mit vielen Frames mit einem Overlay ausblenden können wollen muss. Das geht nur, wenn ich die ganze Seite in ein Iframe unterbringe. Das hätte noch viele andere Vorteile.

Ich habe schon einiges von dieser "prototype"-Eigenschaft gehört. Frage: Kann ich damit die top-Eigenschaft für alle Dokumente so modifizieren, das man stets ein ganz bestimmtes Dokument mit top zurück kriegt, also nicht wirklich das aller erste (in dem fall das iframe)?

Kann ich das "wahre" top-Element sozusagen überlagern durch ein "bestimmtes"?

Hat jemand ein paar gute Links zur Funktionsweise von prototype (ich meine nicht dieses gleichnamige Framework!!)?

Edit: Habe ein bisschen rumprobiert:

Code:
top.prototype = function(){
	alert(1234);
}

alert(top.document.title);

funktioniert nicht,

und
Code:
Window.top.prototype
= function(){
	alert(1234);
}
sowie
Code:
Document.top.prototype
= function(){
	alert(1234);
}

ebensowenig :confused:

Danke

JavaUncle
 
Zuletzt bearbeitet:
Die Sache mit den Prototypes funktioniert folgendermaßen:
Angenommen, du willst für jeden String die Möglichkeit haben, ihn in Anführungszeichen zu setzen, (nur ein Beispiel :)) musst du folgendes tun:
Erst die Funktion definieren:
Javascript:
String.prototype.quote = function()
    {
        return "\"" + this + "\"";
    }
Und dann kannst du sie anwenden:
Javascript:
"abcd".quote());
    // abcd --> "abcd"
Auf diese Weise kannst du dann auch vorhandene Methoden und Eigenschaften überschreiben:
Javascript:
document.prototype.top = function()
    {
    // dein Code
    }
Dann musst du nur noch beim Aufrufen darauf achten, document.top zukünftig als document.top() aufzurufen.
 
Hallo,

letzteres hatte ich auch schon probiert:

Code:
//erstmal sehen was passiert... es sollte nichts passieren!
document.prototype.top = function() {
	return top.document;
}

alert(top.document.title);

Habe 5 Dateien:

Doc1, Doc2, Doc3, index, index_iframe.

index_iframe enthält ein iframe. Das iframe lädt index. index enthält ein frameset, dessen 3 frames laden Doc1, Doc2, Doc3. Soweit, so gut. In Doc2 befindet sich der JavaScript Code.

Das alert soll nun den Titel von index wiedergeben, nicht den von index_iframe.

Wenn ich obigen Code ausführe, scheitert es im MSIE bereits am "document.prototype". Der MSIE 6 meldet "document.prototype ist Null oder kein Objekt"...

Gehört top explizit zum document? denn normalerweise ist der Aufruf doch genau anders rum. top.document.machDiesMachDas();

Wenn ich z.B. das hier mache, dann kommt keine Fehlermeldung. Aber es passiert auch nichts:

Code:
Object.prototype.top = function() {
	return document;
}

Object ist doch das höchste aller Objekte, quasi die Mutter von JavaScript. Richtig?

Gruß

JavaUncle
 
Zuletzt bearbeitet:
Oh, ich glaube, ich hab einen Fehler gemacht. Du müsstest nicht im prototype von document top überschreiben, sondern in dem von window (document.top existiert ja gar nicht, sondern nur window.top). Also window.prototype.top.
Ich habe allerdings festgestellt, dass window.prototype scheinbar keine Eigenschaften hat, und da Änderungen am Prototype sowieso erst auftreten, wenn das Objekt neu instanziert wird, müsstest du diese Änderung vornehmen, bevor die Frames überhaupt geladen sind.

Von daher kann ich dir jetzt noch keine vollständige Lösung bieten, ich müsste die Sache mal an deinem Fall testen. Ich bräuchte also am besten die Dateien, an denen du arbeitest.

Ich kann aber sicher sagen, dass Object.prototype nicht die richtige Anlaufstelle ist.
Javascript:
var test1 = {};
Object.prototype.abc = function() {
return "test";
}
var test2 = {};
test1.abc();
// --> Error!
test2.abc();
// --> "test"
Ich melde mich wieder, sobald ich mehr rausgefunden hab.
 

Neue Beiträge

Zurück