Kündigen einzelne Bild Anfrage in html5-Browsern
Ich bin laden (große) Bilder dynamisch zu zeichnen, in ein html5 canvas-Element, so etwas wie dieses:
var t = new Image();
t.onload = ...
t.src = 'http://myurl';
Aber jeder einmal in eine Weile möchte Abbrechen die Bild Anfrage komplett.
Der einzige Weg, ich kam mit der Einstellung src
zu ''
. also
t.src = ''
Dies funktioniert in vielen Browsern, aber es scheint, dass nur Firefox tatsächlich bricht die http-Anfrage für das Bild.
Getestet habe ich diese mit Fiddler2 durch das deaktivieren von caching und aktivieren "emulieren" modem-Geschwindigkeit". Dann läuft ein Turnschuh zum test Abbrechen Bild Anfrage. (ich würde gerne hören, andere Ideen auf, wie um dies zu testen)
Ich weiß, es gibt Möglichkeiten zum Abbrechen aller Aufträge (wie in dieser Frage), aber ich möchte nur absagen.
Irgendwelche Ideen auf andere Weise (insbesondere auf mobilen Browsern) zu tun?
- Vorsichtig sein
t.src = ''
die Spezifikation ist vage, was geschehen soll. Siehe nczonline.net/blog/2009/11/30/... - Richtig... einige Browser sind die Anforderungen an der url der Seite (oder Basis-url), um zu versuchen, laden Sie das Bild mit
src=''
. Unter Firefox, Einstellungt.src=null
auch verwirft die Anfrage, aber tut nichts auf anderen. Die neuere (aktuelle arbeiten) - Spezifikation, sagt (in manchen Situationen), die es sollte Feuer onerror... kindof. - Einstellung
src
für ein inline-Bild unter Firefox auch wird die Vorherige Anfrage:t.src='data:image/gif;base64,R0lGOD...
finden Sie im diese Geige - leeres image src machen das Neuladen der Seite die Anforderung, erhalten Sie auf der Seite. Also, wenn Sie kommen auf eine Seite nach einem post, der browser wird automatisch wiederherstellen der POST. Das ist wirklich ein guter Weg, um zu Schießen selbst in den Fuß.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist der einzige Weg, dass ich es geschafft, es funktioniert in allen modernen Browsern (Chrome, Safari, Mobile Safari, Firefox und IE9).
iframe
image tag
zu denbody
imiframe
img.onload
abgeschlossen wurde, können Sie das Bild dom-element zu zeichnen, um ein html5-canvas mitdrawImage()
stop()
auf dieiframe
'scontentWindow
(oderexecCommand("stop", false)
aufcontentDocument
im IE).Ich eine Klasse angelegt, die für diese, und setzen Sie den coffeescript-code (und es kompiliert javascript) auf github:
Aufhebbare Html5 Image Loader
Wenn Sie möchten, um mit ihm zu spielen, ich habe auch ein jsfiddle ausprobieren. Denken Sie daran, um zu starten Fiddler2 (oder etwas ähnliches) zu sehen, dass die eigentliche Netzwerk-Anfrage ist wirklich abgebrochen.
Können Sie versuchen, Fenster.stop() zum stoppen aller Anfragen, aber nicht die individuellen. In IE, es ist nicht das Fenster.die stop () - es ist Dokument.execCommand("Stop", false).
Wenn Sie haben andere Dinge auf Anfrage-klug ist, dann dadurch wird es stören. (Sie würde follow-up mit einem neu-Antrag für die Ressourcen, die Sie immer noch wollen, aber das ist zu viel wie harte Arbeit).
Also, wenn Sie wollte aufhören eine einzige Anforderung für ein großes Bild, was Sie tun können, ist, laden Sie das Bild in ein Dokument in einem versteckten IFRAME. Das Ereignis onload des iFrames kann verwendet werden, laden Sie das Bild in der Haupt-Dokument, indem die Zeit es sollte zwischengespeichert werden (vorausgesetzt, Sie haben die caching-Direktiven konfiguriert, dies zu tun).
Wenn das Bild zu lange dauert, dann können Sie den Zugriff auf die IFRAME-contentWindow und geben einen Stopp-Befehl an, dass.
Müssen Sie so viele IFRAME-Elemente wie Bilder, simultan abgefragt werden.
Bezweifle ich, es ist ein cross-browser Weg, um dies geschehen zu lassen, ohne hacks. Ein Vorschlag ist, um eine AJAX-Anfrage an ein Serverseitiges Skript, die gibt die eine Base64-codierte version der Bild, das Sie können dann festlegen, wie die
src
Attribut. Dann können Sie diese Anfrage Abbrechen wenn Sie sich entscheiden, Abbrechen laden des Bildes. Dies könnte schwierig sein, wenn Sie wollen, um das Bild schrittweise jedoch.<canvas>
.Gleiche problem habe ich tatsächlich und machte einige tests.
Habe ich einige tests mit iframes und haben einigen Erfolg. Getestet auf Firefox 3.6 und Chrome. Für die tests, die ich verwendet 9 Bilder von 15Mb. Mit img-preloading ich tötete meinen firefox mehrmals (ja, nicht viel memoty auf diesem computer), mit Hilfe der img - "suspend" - Aktion nicht verhindern, dass ein Bild geladen wird, wenn die Anfrage gestartet haben, mit iframes, die suspend-Aktion wirklich beenden Sie den download (wie Entferne ich das iframe). Nächste Schritt wird sein, die Prüfung mit XMLHttpRequests. Da diese version meiner test-code ist mit der braowser cache-Verhalten bilden die Bild-url um zu verhindern, dass ein zweiter laden und das funktioniert auch mit ajax-Anfragen. Aber vielleicht mit iframes, ich könnte einen Weg finden, um abrufen von Binärdaten aus dem geladenen Bild im iframe direkt (mit der Begrenzung auf dieselbe domain-urls).
Dies ist mein test-code (der wirklich schnell auf Chrome, kann töten Ihr firefox mit zu viel sehr große Bilder):
Bearbeiten und hier ist fillde, um es zu testen: http://jsfiddle.net/wPr3x/
use_unique_name
aus, dann wirst du sehen, dass das Bild zwischengespeichert wird, nachdem zum ersten mal die gesamte Seite geladen wird.loader.onload =
anstelle der jquery -load()
. Aber hier ist ein Turnschuh mit den jQuery-Methoden, die das selbe problem hat: jsfiddle.net/amirshim/na3UA/1