2012-01-13 1 views
0

My iframe содержит ссылку, которая должна изменить хеш/триггер события в родительском.Изменение URL-адреса из iFrame: setTimeout изменяет порядок работы window.location?

Каким образом этот код не будет работать:

<!-- in iframe --> 
<a href="#" onClick="parent.navigate();return false;">Link</a> 

// in parent 
    function navigate() { 
    window.location.href = '#anchor'; 
    } 

Но это делает:

<!-- in iframe --> 
<a href="#" onClick="parent.navigate();return false;">Link</a> 

// in parent 
    function navigate() { 
    setTimeout(function() { 
     window.location.href = '#anchor'; 
    }, 0); 
    } 
+0

Во второй версии 'Navigate()', что произойдет, если вы делаете 'var _window = window;' перед setTimeout, а затем 'alert (_window === window);' внутри setTimeout? –

+1

Кроме того, в первом 'onClick' у вас есть своенравный символ' ''. Это просто опечатка в вопросе? –

+0

Жаль об этом; опечатка в вопросе. –

ответ

0

Я думаю, что у вас есть проблемы с контекстом, что функция навигации() находится, с window быть в контексте фрейма.

Попробуйте установить навигацию метод использовать top.location.href вместо этого, например:

// in parent 
    function navigate() { 
    top.location.href = '#anchor'; 
    } 

или в качестве альтернативы, в вашем IFRAME, звоните parent.window.location.href = '#anchor'

0

@am не комментарий пользователя, что у вас есть апостроф, вероятно, причина

Даже маркер кода показывает различные моменты из-за этого.

enter image description here

+0

Извините, отредактировал вопрос, чтобы исправить мою ошибку. Это была опечатка в вопросе, но я все еще вижу это поведение на своем сайте. –