Warum entfernt jQuery Body- und Head-Tags, wenn ein Iframe mit einem Style-Tag gefüllt wird, aber nicht ohne?

7

Wenn ich den folgenden Code ausführe, werden die Body- und Head-Tags entfernt.

%Vor%

Wenn ich dann die Style-Tags entferne, wird alles korrekt angezeigt. Warum ist das und wie kann ich damit aufhören, die Kopf- und Körper-Tags zu entfernen? Ich möchte, dass der Inhalt so wie er ist ohne jegliche Manipulation gefüllt wird.

    
Middletone 08.04.2012, 04:47
quelle

2 Antworten

3

Hier sind die Schritte, die Sie ausführen können, um eine Idee zu erhalten, wie Sie den Iframe-Inhalt in eine Zeichenfolge kopieren, ändern und im Iframe ersetzen können. Diese Schritte sollen in Ihrem Chrome-Debugger durchgeführt werden und dienen ausschließlich zu Bildungs- und Demonstrationszwecken. Sobald Sie den Prozess verstanden haben, können Sie versuchen, in Ihrem Code auf Ihrer Website zu replizieren.

Führen Sie jede Funktion im Chrome-Debugger nacheinander aus:

%Vor%
  

Im unteren Bereich der Website, im iframe, sah ich meine Nachricht in rot auf weißem Hintergrund. Ich konnte es auch in der Quelle sehen:

%Vor%

Ich habe diese Aktionen auf einer anonymen Website mithilfe der Chrome-Debugger-Konsole ausgeführt, um die Befehle auszuführen. Der erste Befehl erstellt einen Iframe auf der Homepage mit der Firmenseite der Site im Iframe. Die verbleibenden Befehle erhalten den Kopf und den Körper dieses iframe, klonen den Körper, fügen etwas Zeug wie eine "JAMES WAS HERE" -Nachricht dem Körperklon hinzu und ersetzen dann den iframe-Körper durch diese Kopie.

Ich habe auch die gleichen Ergebnisse verifiziert, indem ich Ссылка in meinem Browser geladen und Ссылка im iframe. Indem ich die obigen Schritte wiederholte, sah ich meine Nachricht "JAMES WAS HIER".

** Das gravierendste Problem, das ich hatte, war, dass ich die JavaScript- oder CSS-Stil-Tags in der Kopie nicht verlassen konnte. Die Lösung für das Styling besteht darin, alle Stiländerungen vor zu machen, um den Körper wieder zum iframe hinzuzufügen. **

Aus irgendeinem Grund hat der Browser versucht, JavaScript auszuführen und Fehler zu verursachen. Der Kontext dieser Fehler ließ mich glauben, dass das JavaScript im Kontext von Toplevel anstelle des Iframe-Kontexts ausgeführt wurde! Dies kann ein Showstopper für Sie sein. Möglicherweise müssen Sie einen anderen Plan erstellen, um Vorschauen in einem Popup-Fenster oder inline anzuzeigen. Dies kann sich auch auf verschiedenen Websites mit unterschiedlichem JavaScript anders verhalten. Es kann sich auch merkwürdig im IE verhalten.

Kurz gesagt, ich sehe diese Lösung nicht als etwas, das eine Produktions-Website unterstützen würde, da das JavaScript im iframe entfernt werden muss; Je nach Ihren Anforderungen ist es jedoch möglich, dass dies in der Produktion funktioniert, wenn Sie das Iframe-DOM nicht zur Verwendung von JavaScript benötigen.

Trotzdem war das ein interessantes Problem zu erforschen!

    
jmort253 08.04.2012, 06:29
quelle
16

Ich hatte das gleiche Problem und lernte von diese SO-Frage , dass es tatsächlich der Browser ist, der das Stripping durchführt, als Teil seiner Analyse der Eigenschaft innerHTML , was jQuery intern in .html() verwendet.

Vielmehr liegt das Problem tatsächlich darin, dass jQuery ein intermediäres neues DIV verwendet, von dem ich glaube, dass es bestimmte Tags nicht enthalten darf, was zum Abstreifen führt.

Zur Lösung, dann. Es ist so einfach, die Eigenschaft innerHTML des Elements html direkt wie folgt zu setzen:

%Vor%

Für Ihren speziellen Fall richten Sie einfach das html -Element innerhalb iframe aus. Ihr endgültiger Code könnte sein:

%Vor%     
guillobuteler 22.04.2013 21:25
quelle

Tags und Links