Wie zu erkennen, wenn sich ein iframe ist zugänglich, ohne dass ein Fehler???
Grundsätzlich habe ich ein iframe geladen, der Zugriff von den Eltern, Wann immer es auslösen das onload-Ereignis. Es funktioniert einwandfrei, aber ich erhalte Fehler, wenn der Inhalt des iframe sind nicht mehr auf der gleichen domain, die zu erwarten ist.
Einzige Sache ist, möchte ich zur Vermeidung dieser Fehler. Leider ein try/catch nicht abfangen dieser Ausnahme und versucht, den Zugriff auf diese Eigenschaften zu überprüfen, Sie produziert den gleichen Fehler wieder, so Sieg über den Zweck.
Gibt es eine zuverlässige Möglichkeit für mich, um einfach überprüfen, wenn der iframe-Inhalt zugegriffen werden kann, ohne dass es Fehlermeldungen?
Dank
Edit:
Zuliebe Kontext und nicht mit Menschen Antwort mit unsachlichen Kommentare, die ich Schreibe ein kleines Skript, das automatisch die Größe des iframe auf der übergeordneten Seite auf der Grundlage der Höhe des iframes Dokument. Wenn ein Benutzer klickt auf einen link innerhalb des iFrames, die Punkte außerhalb der Domäne, die ich offensichtlich nicht in der Lage sein zu erkennen, das die Höhe der Seite, aber ich würde lieber nicht löst keine Fehler in der Konsole und statt die Ausnahme behandelt anmutig.
Ich bin mir bewusst, dass es sind workarounds verfügbar, ich versuche einfach nur, mich zu erziehen, indem Sie herausfinden, wenn es eine anmutige Weise zu behandeln, diese Arten von Fällen, anstatt nur der Rückgriff auf ein hässlicher workaround.
- Vielleicht ist es ein Zeichen erzählt, die Sie nicht verwenden iframes...
- Ernsthaft? Unterlassen Sie bitte das kommentieren wenn Sie nichts zu beitragen.
- Naatan, der Kerl gibt dir ein Rat, I +1. Sie können nicht über die Seite und frame miteinander kommunizieren oder sich gegenseitig zu manipulieren den Inhalt (überhaupt; nicht einmal Lesen) - wenn Ihr von Protokoll und hostname passen nicht zu den Buchstaben. Das ist es, und es wird nie einen Weg zu machen, die sich anders Verhalten. Damit wird verhindert, dass schädliche Jungs mit Chaos und stehlen von unschuldigen Menschen gibt.
- Hari, ich bin mir durchaus bewusst, aber sehen, wie ich es nicht bin, geben Sie den Kontext meiner Frage sollte man nicht machen bis eine. In Ihrem Szenario meine Frage keinen Sinn macht, Stimme ich mit. Aber es ist irrelevant, ich bin eine Frage zu stellen und alles, was Sie tun, ist zu sagen: "NUN, in MEINEM Szenario Ihre Frage macht keinen Sinn was so überhaupt, so sollten Sie einfach NICHT tun, was Sie versuchen zu tun, als mit". Es ist irrelevant. Ich update meine wichtigste Frage mit Kontext, obwohl, so dass Sie nicht haben, um weiterhin diese Arten von Kommentaren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie können hinzufügen, ein wenig JavaScript, um alle Seiten Ihrer domain, die Sie laden möchten, in den iframe, die Sie nutzen könnten
Fenster.postMessage
, die befreit ist von der same-Origin-Policy. Wahrscheinlich der einfachste Weg wäre, um das untergeordnete Fenster eine Nachricht an die Eltern, wenn es lädt und verwenden, stattonload
. Zum Beispiel könnten Sie fügen Sie diese auf jeder Seite:Wird eine Nachricht an das übergeordnete Fenster, wenn die Seite geladen wird, in einem Rahmen mit der gleichen Herkunft. Sie würden dann hören, wie diese:
Beachten Sie, dass die Beispiele, die Verwendung der W3C - /Netscape-event API und somit funktioniert nicht in Internet Explorer vor der version 9.
Versuchen Sie dies:
BEARBEITEN: fügen Sie einen try-und catch, kein Fehler wird false zurückgegeben.
Können Sie die aktuelle URL der
iframe
mitwindow.frames['frame_name'].contentWindow.location.href
.Wenn der Benutzer navigiert Weg von Ihre domain, dann gibt es keinen Weg, es zu tun. Sorry...
Mehr Informationen hier.
setTimeout
in 0 ms zu umgehen, die.Können nicht Sie Zugriff auf die
src
- Attribut aus dem übergeordneten?Wie ich es verstehe, die
iframe
- element gehört zu den "Eltern" - Seite, in der Erwägung, dass diewindow
Objekts mit dem iframe gehört zu den 'Kind' - Seite.Diese funktioniert bei mir:
Ok, das ist übertrieben, nicht viel, aber ein hack, und vielleicht auch nicht möglich, in Ihrer situation aber trotzdem :
Fügen Sie eine javascript-Integration in alle Seiten Ihrer Website, die versucht, Zugriff auf den opener(der parent-frame) und legen Sie ein flag(eine variable wie bool stillOnMySite) zu wahren.
Dann
Zeit basiert : Das Skript in die Seiten Ihrer website wird das flag in jeder Sekunde auf true, wird das Skript in Ihre übergeordneten iframe setzt den flag bei jedem zweiten auf false. Eine Umfrage der iframe in ein setTimeOut(xxx,1). Wenn das flag nicht wieder wahr, dann wird der Benutzer beim verlassen Ihre Website, und Sie sollten nicht Umfrage des iFrames, wenn das flag true ist, wird der Benutzer immer noch auf Ihrer website können Sie eine Umfrage der iframe.
Klicken Sie auf basierend : Mit Hilfe von jquery für unaufdringliche javascript, die das Skript in die Seiten Ihrer website überwacht clickevents in der alle links in der Seite. Wenn ein link außerhalb Ihrer domain, das setzt das flag in der übergeordneten iframe auf false.
Natürlich ist diese ganze Theorie zerfällt in Stücke, wenn Sie nicht fügen Sie das Skript in Ihre Web-Seiten.
Alternativ, dachte ich nur : Wenn Ihr iframe starten immer auf Ihrer website, keine Notwendigkeit, ändern Sie Ihre website-Seiten, einfach injizieren, die n°2-Lösung von der übergeordneten iframe in die iframed Seite.
könnten Sie mir sagen, wie man die iframe-src?
wenn Sie javascript verwenden, um es zu ändern dynamiclly,dein problem ist einfach zu behandeln mit.
auch so,ich glaube nicht, dass es ein guter Weg, um dieses Problem zu lösen.
hoffe jemand findet eine bessere Lösung.
Wie etwa nicht-rendering IFRAME überhaupt (innerhalb der übergeordneten Seite), wenn seine "href" ist nicht auf dem gleichen Protokoll und host als übergeordnete Seite? Bin ich eventuell Missverständnis Dinge im Zusammenhang mit, ob Sie eigene beide Seiten, oder nur eine von Ihnen (und welche). Aber wenn man eigene Eltern-Seite, Website, Sie sollten in der Lage sein, dies zu tun, ob auf dem server (bevor der IFRAME ist auch im Lieferumfang enthalten), oder an irgendeinem Punkt auf dem client (Seite-laden/doc-Belastung).