2010-02-05 13 views
16

Czy istnieje sposób na zatrzymanie elementu iframe w trakcie ładowania strony? Muszę to zrobić, ponieważ mam tło iframe przesyłające dane z serwera WWW (poprzez mechanizm typu Comet) i muszę mieć możliwość oddzielenia połączenia w dowolnym momencie.Zatrzymywanie elementu iframe przed załadowaniem strony przy użyciu javascript

Wszelkie pomysły mile widziane.

+1

Nie jestem wystarczająco pewny siebie, aby umieścić go jako odpowiedź, ale czy nie możesz po prostu skierować elementu iframe do innego adresu URL? Coś jak "document.getElementById (" myiframe "). Src =" http://www.example.com/not-long-polling.html ";' –

+1

To był mój pierwszy pomysł (+1), ale potrzebuję zawartość ramki do zachowania. – Konrad

Odpowiedz

26

Dla Firefox/Safari/Chrome można użyć window.stop():

window.frames[0].stop() 

dla IE, można zrobić to samo z document.execCommand ('STOP'):

window.frames[0].document.execCommand('Stop') 

rozwiązania cross-browser można użyć:

if (navigator.appName == 'Microsoft Internet Explorer') { 
    window.frames[0].document.execCommand('Stop'); 
} else { 
    window.frames[0].stop(); 
} 
+12

Prawdopodobnie lepiej jest sprawdzić 'typeof (window.frames [0] .stop)' zamiast 'navigator.appName'. Przyszłe wersje IE mogą to wspierać. – unclenorton

+0

@unclenorton Naprawdę nie dostaję tego, co próbujesz powiedzieć. możesz napisać warunek? –

+6

@MorSela, próbuję powiedzieć, że lepiej jest sprawdzić dla funkcji, a nie dla przeglądarki. Warunek będzie wyglądał jak '(typeof (window.frames [0] .stop === 'undefined')'. – unclenorton

13

cały kod powinien wyglądać następująco (linia unclenorton została brakuje biustonosz dujących)

if (typeof (window.frames[0].stop) === 'undefined'){ 
    //Internet Explorer code 
    setTimeout(function() {window.frames[0].document.execCommand('Stop');},1000); 
}else{ 
    //Other browsers 
    setTimeout(function() {window.frames[0].stop();},1000); 
} 
+1

Dlaczego Użyto 'setTimeout'? – Nishi

1

Tylko,

document.getElementById("myiframe").src = ''; 
0

nie obsługują w IE

<script> 
function stopit() { 
window.stop(); 

}; 
</script> 


<a href="#" onclick="stopit()" class="Stop" title="Stop"></a> 
+0

Proszę spojrzeć na zaakceptowaną odpowiedź, myślę, że jest całkiem równa temu, co wysłałeś – Marged

0

Bardzo proste:

1) Get iframe lub img don” t chcesz załadować:

let myIframe = document.getElementById('my-iframe') 

2) Następnie można po prostu zastąpić atrybut src do about.blank:

myIframe.src = 'about:blank' 

To wszystko.


Jeśli chciał załadować iframe lub obraz w czasie, w funkcji, gdy niektóre zdarzenie to po prostu zapisać zmienną SRC dataset:

myIframe.dataset.srcBackup = myIframe.src 
// then replace by about blank 
myIframe.src = 'about:blank' 

Teraz można go użyć w razie potrzeby łatwo:

myIframe.src = myIframe.dataset.srcBackup 
Powiązane problemy