2 Stimmen

Herausfinden, in welchem iframe ein Skript ausgeführt wird

Ich habe eine Seite mit mehreren iframes. Einer dieser iframes hat eine Seite von einer anderen Domain. In diesem Iframe befindet sich ein weiterer Iframe mit einer Seite von der übergeordneten Domain.

my page from mydomain.com
  -> an iframe
  -> iframe "#foo" from another-domain.com>
    -> iframe "#bar" from mydomain.com
  -> another iframe

Ich muss einen Verweis auf den Knoten "#foo" innerhalb der Hauptseite erhalten. Das Sicherheitsmodell sollte mir dies ermöglichen, da "#bar" die gleiche Domäne hat wie die Hauptseite. Was ich also tue, ist eine Iteration durch die window.top Array und vergleicht jedes Element mit dem window Objekt, das derzeit das Fensterobjekt "#bar" ist. Mein Testcode sieht wie folgt aus:

for (var i = 0; i < top.length; i++) {
    for (var j = 0; j < top[i].length; j++) {
        if (top[i][j] == window) {
            alert("The iframe number " + i + " contains me");
        }
    }
}

Dies funktioniert in allen Browsern einwandfrei, aber Internet Explorer 6 meldet einen Sicherheitsfehler beim Zugriff auf top[i][j] . Irgendwelche Ideen, wie man dieses Problem im IE6 lösen kann?

Gracias.

1voto

thomasrutter Punkte 109036

Es sieht so aus, als wäre der IE nicht glücklich darüber, dass Sie auf Eigenschaften von try[i] da es Teil eines anderen Sicherheitskontextes ist, obwohl die Eigenschaft, auf die Sie zugreifen, unter demselben Sicherheitskontext wie das Skript stehen würde.

Da haben Sie vielleicht Pech gehabt. Haben Sie jedoch versucht, sie zu ersetzen:

  • try[i]
  • try[i][j]

mit:

  • try.frames[i]
  • try.frames[i].frames[j]

Dies sollte mehr oder weniger der Fall sein. Es ist ein Versuch, und ich weiß nicht, ob es funktioniert, aber es könnte einfach sein.

0voto

juandopazo Punkte 6187

Ein Kollege fand die Lösung: Er kletterte stattdessen auf den Baum.

var getLastParent = function (baseWindow, topWindow) {
    var lastParent, nextParent;
    lastParent = nextParent = baseWindow;
    while (nextParent != topWindow && nextParent != nextParent.parent) {
        lastParent = nextParent;
        nextParent = nextParent.parent;
    }
    return lastParent;
};
var findWindow = function (baseWindow, topWindow) {
    var lastParent = getLastParent(baseWindow, topWindow);
    for (var i = 0; i < topWindow.length; i++) {
        if (topWindow[i] == lastParent)
            return i;
    }
    return -1;
};

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X