Vor der Frage, lassen Sie mich dies mit der Tatsache voraus, dass ich an einem sehr atypischen Projekt arbeite. Mir geht es nicht um die Sicherheit oder browserübergreifende Auswirkungen. Ich verwende einen benutzerdefinierten Build des Chromium-Projekts.Bestimmen Sie, welcher Rahmen (Name) eine Funktion in JavaScript
Meine Frage ist, wenn ich eine Funktion aus einem anderen Namespace aufrufen, wie kann ich den ursprünglichen Namespace ermitteln?
Zum Beispiel können sagen, ich habe drei Frames:
1. window
-> 2. frame1 //is a child of window
-> 3. frame2 //is a child of window
Jetzt können sagen, dass einige JavaScript in window
eine Funktion doStuff()
hat genannt, dass gebe ich frame1
und frame2
Zugang zu, indem Sie:
var localDoStuff = top.doStuff;
Innerhalb der Funktion doStuff
, gibt es eine Möglichkeit für mich zu bestimmen, welche von frame1
und frame2
es genannt? Wenn ich localDoStuff
im Rahmen von frame1
anrufe, kann ich frame1
's DOM window object im Rahmen von doStuff
bekommen?
Wenn ich arguments.callee.caller
verwende, gibt es mir die String-Darstellung der Funktion, die es aufgerufen. Ich möchte jedoch den -Bereich abrufen, in dem diese Funktion definiert wurde.
I tun haben Zugriff auf die Quelle des Browsers, wenn jemand eine gute, direkte Idee hat, wie der Browser zu ändern, um dies zu ermöglichen.
von Kommentaren Pasted: Ich emuliert im Grunde ein Betriebssystem, das mehrere Anwendungen ausführt. Jede dieser Anwendungen ist ein Iframe, der Zugriff auf eine API hat, die im übergeordneten Frame der Anwendungen definiert ist. Nehmen wir an, diese API hat die Funktion requestFocus() - keine Argumente erlaubt, wie in der API-Spezifikation definiert, die ich implementiere. Um den richtigen iframe-Fokus zu erhalten, müsste ich wissen, welcher Iframe die requestFocus-Funktion genannt wird. Ich weiß, dass dies keine ideale Situation ist - ich habe leider nicht die API-Spezifikation geschrieben ...
Vielen Dank für Ihre Hilfe, ich weiß, dass dies eine wirklich seltsame Frage ist.
Es gibt viele Hacks ich mir vorstellen kann, aber dies scheint nicht sinnvoll zu sein ... Warum wissen würde tun müssen, um Sie, welches Bild es genannt? Wenn Sie das Fensterobjekt benötigen, sollten Sie es mit Ihren Anrufen übergeben. –