2013-05-08 14 views
11

setTimeout() numaralı telefonu da içeren çeşitli javascript kodlarını çalıştıran bir sayfam var. Bir kullanıcı başka bir sayfaya gitmek için bir bağlantıyı tıklarsa, bu sayfada javascript hangi noktada çalışmayı durdurur ve bu nedenle setTimeout tarafından çağrılan kodum artık çağrılmayacaktır? Örneğin.Bir link tıklandıktan sonra javascript bir sayfada ne zaman çalışmayı durdurur?

  • en kısa sürede bağlantı (bu yanlış olduğunu biliyorum) tıklandığında olarak
  • tarayıcı yeni sayfa
  • başka nokta almaya başlar?

Ve bu farklı ana tarayıcılar için farklı?

Arkaplan

Ben paylarının uğruna büyük ölçüde bunu bilmek ziyade herhangi bir sorunu çözmek istiyoruz. Bu konuda düşünmeme neden olan sorun, bir kullanıcı bir sayfada belirli bir bağlantıyı tıkladığında bir şey yapmak isterim. Bir ajax araması yapmak ve sonucu işlemek istiyorum, ancak sayfanın yüklenmesinden önce tamamlandığında çok endişelenmiyorum. Bu yüzden ben link click üzerine bir setTimeout() ateş edeceğim ve sonra şansım varsa bitireceğim ama eğer yapmazsam olmaz. Hangi durumlarda çalışacağını merak ettim. Bu soruna başka çözümler de olsa, ben sadece bu sorunun cevabını bilmek istediğim soruna çözüm istemiyorum.

+5

(https://developer.mozilla.org/en-US/docs/DOM/window.onunload), ama neden sizin için önemli bu? –

+0

_Which_ tarayıcı? –

+1

* '' aktif zamanlayıcılar '' ('setTimeout 'eklenir), [' boşaltma belge temizleme adımları'] sırasında silinir (http://www.w3.org/TR/html5/browsers.html#unloading-document-cleanup (diğerlerinin yanı sıra) ['belge prosedürünü boşalt '] olarak adlandırılan adımlar (http://www.w3.org/TR/html5/browsers.html#unload-a-document).Yine de [navigasyon süreci] sırasında tam olarak ne zaman çağrıldığından emin değilim (http://www.w3.org/TR/html5/browsers.html#navigating-across-documents) – Bergi

cevap

0

olası bir çözüm, click olayı durdurmak bir zaman uyumsuz çağrı uzağa ateş ve ajax çağrısından sonuç işlendiğinde varsayılan olay devam etmek olacaktır. Veya mümkünse, sunucudaki işlemeyi gerçekleştirebilirsiniz. Bu durumda, varsayılan olayı durdurmanıza bile gerek kalmayacaktır - sadece eşzamansız çağrınızı tetikleyin. Sorunuza cevap olarak

, Senaryonun onunload olaydan sonra çalıştırmak durdurmak olacağını Jack katılıyorum.

Bu heplileri umarız.

: 1. Adım:

3

İşte ne sırası bulunmaktadır Bir linke tıklayın. Burada tarayıcı sunucuya bir istek gönderir ve yanıtı bekler. Geçerli sayfanın belge nesnesi hala var.

Adım 2: Tarayıcı yanıtı alır. Geçerli sayfanın belge nesneleri hala var.

Adım 3: tarayıcı, ayrıştırır oluşturur ve yeni bir doküman nesne yanıt vermektedir. Örneğin, bir iframe yanıtı hedeflemiş, SÜRECE geçerli sayfanın JS duracak zaman

Adım 3'tür. Bunu yaparsanız, yeni belge nesnesi iframe içinde oluşturulur ve geçerli sayfanın belge nesnesi bozulmadan kalır ve JS hala işlevsel kalır.

Sorunuzu cevapladığınızı umuyorum! Muhtemelen [onunload olay] sonra

+0

Teşekkürler! Daha ayrıntılı olarak açıklanacak herhangi bir referansınız var mı? – Rory

+0

Tarayıcıya yanıt alınmadan önce eski DOM'ın kaldırıldığını düşünüyorum. Bu dizinin bu olduğunu düşündüğünüz şey nedir, herhangi bir referansınız var mı? – Bergi

+0

Kullanıcının yanıt vermek için bağlantı bekleyip beklemediğini tespit etmenin bir yolu var mı? Örn: "Kullanıcı ayrılmaya çalışmıyorsa, daha yoğun bir iş yapın." –

İlgili konular