2016-04-04 17 views
6

Aşağıdaki kod, yönlendirme 1 veya başka bir numaradan bağımsız olarak konumu www.bing.com olarak değiştirir. Yönlendirme 1 ise, "yönlendirme" günlüğünü kaydeder ve daha sonra www.bing.com adresine yönlendirir. En iyi tahminim, href ayarlandığında bir değişiklik olayı tetiklendiğinde, ancak yürütmeden önce bazı tıklamaları almasıdır. İlk kod satırından sonra hala çalıştırılır. Veya? kim olursa ne yaparsın if sonra her şey de gerçekleştirilmedi ancak (IE test etmedim) Chrome ve FF arasında bir fark var gibi görünüyor, çünkü varNeden window.location.href komut dosyasının yürütülmesini durdurmuyor

if (redirect == 1) { 
    console.log("is redirecting"); 
    window.location.href = "http://www.google.com"; 
} 

window.location.href = "http://www.bing.com"; 
+1

'else' bloğunu kullan – DanFromGermany

+0

İlginç! MDN [diyor] (https://developer.mozilla.org/en-US/docs/Web/API/Window/location) "Konum nesnesine yeni bir değer atandığında, bir doküman URL kullanılarak yüklenir location.assign() çağrılmış gibi. Aynı davranışı .assign() ile mi alıyorsunuz? –

+1

@DanFromGermany - Gerçekten bunu başka biriyle çözdüm, ama beni rahatsız ediyor, neden devam ettiğini bilmiyorum – Bildsoe

cevap

2

Davranışın tanımsız olduğunu söyleyebilirim.

Beklenen URL'yi window.location.href olarak ayarladığınızda, geçerli sayfa gerçekte dying durumundadır. Ve bundan sonra yazılan kodun sonucu sadece tahmin edilemez. Bir özelliğe ayarlarken

+0

Ama neden ölmekte iken kod yürütmeyi durdurmuyorsunuz? – Bildsoe

+0

@Bildsoe Bazı durumlarda, sayfa * boyama * olduğunda sunucuya bazı veriler göndermek isteyebilirsiniz. – Lewis

+0

@Bildsoe, konum değiştirmeden önce olayların hala tetiklenmesini isteyebileceğinden, – DanFromGermany

0

.

örnek kod:

var redirect = 1; 

if (redirect == 1) { 
    console.log("is redirecting"); 
    document.location.assign('https://developer.mozilla.org/'); 
} 

alert('go'); 
document.location.assign('https://www.bing.com/'); 

Chrome 'go' in uyarılır ve bing.com yönlendirilirsiniz. Firefox'ta 'go' uyarıldı, ancak MDN'ye yönlendirildiniz.

Yapacağım en iyi şey, diğer şeyleri else içine sarmak.

+1

Evet, ama asıl soru şu ki, neden kod yürütmeye devam ediyor - neden sadece komut yürütme işlemini durdurup "anlık" olarak yönlendirmiyorsunuz? – Bildsoe

1

bir yöntemi çağırmak değil, fark önemlidir:

window.location.href = "something"; 

JavaScript tabanlı sağ iken değişen pencere konumu için kontrol etmez tarayıcı anlamına asenkron ve olay işleri Mülkiyeti siz belirlersiniz, ancak daha sonra öngörülemeyen bir süre.

Bazen, konum değiştiğinde çıkış olaylarının tetiklenmesini veya tetiklenmesini istiyorsunuz.

Bunu HTTP konum üstbilgisiyle karşılaştırdığınızda, davranış aynıdır. Bazen, örneğin konum değişikliği üstbilgisini göndermenize rağmen PHP betiklerini devam ettirmek istersiniz.

İlgili konular