Verhindert das Laden von Bildern bei Nicht-DOM-jQuery-AJAX-Parsern

8

Ich benutze jQuery ajax Anfrage, um HTML auf einer sekundären Seite zu greifen und zu analysieren. Wenn ich mir das Netzwerkfenster von Chrome und FF anschaue, merke ich, dass es auch die Bilder von dort lädt - aber nur, wenn ich das Ergebnis mit $ (Daten) in den "Erfolg" -Rückruf lade.

Der Inhalt wird NICHT in das DOM der aktuellen Seite geladen, weshalb ich ziemlich verwirrt bin, warum das überhaupt passiert.

Aber auf jeden Fall, einfach gefragt, gibt es einen Weg, dies zu verhindern? Ich muss Informationen aus dem Ergebnis holen, aber es trifft nie das Haupt-DOM. Werden Skripte, die das Laden von Bildern verhindern, bis die Ansicht hier funktioniert, oder würde das niemals gegen das geladene Element ausgelöst werden? Beachten Sie, dass dies für eine Userscript-App gilt, so dass ich nicht ganz die Kontrolle über den Ziel-HTML-Code habe.

Danke!

    
Morgon 26.06.2011, 15:52
quelle

3 Antworten

7

Der Grund dafür ist, dass das Bild geladen wird, sobald Sie ein Bild mit der Eigenschaft src erstellen. Zum Beispiel:

%Vor%

Das Bild wird sofort vom Browser geladen, bevor es an das DOM angehängt wird. Dies ist eigentlich eine Optimierung. Zum Beispiel kann es verwendet werden, um Bilder vorzuspeichern, die später verwendet werden.

Da jQuery den HTML-String in eine DOM-Struktur aufbaut, erstellt er img elements auf die gleiche Weise wie das obige Snippet. Wenn das Bildelement erstellt wird, noch bevor es an das DOM angehängt wird, wird die Datei vom Server geladen.

Die einfachste Lösung wäre, alle img -Tags aus dem HTML zu entfernen, bevor Sie sie anhängen:

%Vor%

Wenn dies keine Option ist und Sie die img -Elemente benötigen, können Sie die src -Attribute in etwas anderes umbenennen oder die Attribute entfernen, wenn Sie sie nicht benötigen.

    
lonesomeday 26.06.2011, 16:13
quelle
1

Sie können alle Bild-Tags aus der zurückgegebenen Zeichenfolge suchen und löschen, bevor Sie sie in Ihr DOM laden.

Dies ist die Regex für HTML-Bilder:

%Vor%     
kleinohad 26.06.2011 15:56
quelle
0

Ihr Problem besteht darin, den Antworttext in ein jQuery-Element ( $(data) ) zu laden. Dadurch wird tatsächlich ein DOM für den geladenen Inhalt erstellt, obwohl Sie ihn nicht dem DOM "main" hinzufügen.

Was Sie versuchen sollten, ist, diesen Text aus jQuery zu entfernen und ihn entweder in der Textebene mit Regex zu behandeln, oder ihn in ein XML-Dokument zu laden und mit den verschiedenen verfügbaren XML-Methoden abzufragen.

Wenn Sie jQuery verwenden und das Laden stoppen möchten, können Sie versuchen, hier zu lesen: Javascript: Abbrechen / Image-Anfragen stoppen

    
Variant 27.06.2011 07:02
quelle

Tags und Links