2016-12-22 9 views
0

Открываю небольшое всплывающее окно с использованием window.open(...) и дайте ему имя. Он правильно используется повторно, если для этого окна вызывается window.open s.Обновите открытое окно, которое было открыто с помощью window.open, когда изменения хэша URL-адреса

function openHelp(hash) { 
    var helpWindow = window.open(location.protocol + "/help.aspx" + (hash ? "#" + hash : ""), "helpWindow", "width=750, height=600, resizable=1, scrollbars=1, location=0, directories=0, status=no, menubar=no, toolbar=no"); 
} 

Тот случай, когда он не работает должным образом, когда кто-то окно открытым на помощь URL страницы и только хэш изменения (т.е. #jump-to-me). Только при перезагрузке страницы страница правильно переходит к хэшу.

Есть ли способ найти открытое окно, убедитесь, что URL-адрес совпадает с тем, что мы пытаемся открыть, и условно выполните window.location.refresh() при изменении хеша?

+1

Я быстро запустил эти два столпа переполнения стека, которые могли бы получить вас намного дальше. http://stackoverflow.com/questions/4059179/refresh-child-window-from-parent-window и http://stackoverflow.com/questions/3090478/jquery-hashchange-event –

ответ

0

Был почти там, просто необходимо добавить слушателя событий в это конкретное окно для события hashchange.

function openHelp(hash) { 
    var helpWindow = window.open(location.protocol + "/help.aspx" + (hash ? "#" + hash : ""), "helpWindow", "width=750, height=600, resizable=1, scrollbars=1, location=0, directories=0, status=no, menubar=no, toolbar=no"); 
    helpWindow.addEventListener("hashchange", function() { this.location.reload() }, false); 
} 
1

Если я получу это право, это поможет вам начать работу.

var extraWindow; 

function makeWindow(){ 
    extraWindow= window.open(/* .. */); 
} 

// this will reload the extra window that you just opened. 
function reloadWindow(){ 
    if(extraWindow){ 
    extraWindow.location.reload(); 
    } 
} 

makeWindow(); 

// reload the window when the hash changes or possibly change the page url based on this. 
window.addEventListener("hashchange", reloadWindow, false); 

Надеюсь, это даст хороший ответ.

+0

Поставил меня, спасибо! –