2015-03-18 2 views
1

В настоящее время я использую одну страницу для создания нового окна с URL-адресами с временным воспроизведением. Многие страницы, на которые он загружается, реагируют на хеш-навигацию. Я делаю это так:Как я могу изменить location.hash целевого окна, не перезагружая страницу?

window.open(url,"playback"); 

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

Например, загрузка "pageA.htm", а затем "pageB.htm # tab2" работает безупречно. Однако проблема заключается в том, что когда я пытаюсь перейти от «pageB.htm # tab2« to »pageB.htm # tab3"; полностью перезагружает страницу (правильно реагирует на хэш), вместо того, чтобы просто запускать «onhashchange», как я ожидал.

Есть ли альтернатива window.open(), которую я должен вызывать для хэш-изменений, которые предотвратят полную перезагрузку страницы?

Edit: Окончательное решение выглядит примерно так:

playbackWindow = window.open(url,"playback"); 

Затем, когда мы хотим изменить хэш:

playbackWindow.location.href = "poundIt"; 

ответ

2

Вы не можете использовать window.open, чтобы изменить хеш без перезагрузки страницы. Просто измените значение window.location.hash.

+0

Довольно близко, но мы сталкиваемся с проблемами перекрестных доменов, пытаясь получить доступ к window.location.hash в новом окне. – lars

+0

Ага, поэтому со страницы X вы открываете страницу Y, а затем хотите изменить хэш на странице Y со страницы X? : -) Хорошо, тогда я предлагаю использовать 'window.postMessage' для связи между двумя страницами, как показано здесь: https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage. Таким образом, вы можете просто отправить событие со страницы X и сообщить странице Y, чтобы обновить свой собственный хэш. –

+0

В этот момент я просто толкнул его с помощью большого предложения if ifdomain, которое возвращается к window.open с целью. В идеальном случае страница Y не знает, что ее мастурбируют со страницы X, и для ее дистанционного управления не требуется особых действий. Спасибо за то, что вы указали мне на использование объекта location/window ref вместо того, чтобы вслепую попросить браузер найти правильный по имени :) – lars

0
window.location.hash = "This"; 

должен сделать трюк.

Смежные вопросы