Если вы работаете с несколькими доменами, простая установка src на тот же URL-адрес не всегда вызывает перезагрузку, даже если хэш местоположения изменяется.
Эта проблема возникла при создании вручную фреймов для кнопок Twitter, которые не обновлялись при обновлении URL.
Twitter-кнопки имеют вид:
.../tweet_button.html#&_version=2&count=none&etc=...
Так как Twitter использует фрагмент документа для URL, изменение хеша / фрагмента не перезагружало источник, а целевые кнопки не отражали мой новый загруженный ajax контент.
Вы можете добавить параметр строки запроса для принудительной перезагрузки (например: "?_=" + Math.random()
, но это приведет к потере пропускной способности, особенно в этом примере, когда подход Twitter специально пытался включить кэширование.
Чтобы перезагрузить что-то, что изменяется только с помощью хеш-тегов, вам нужно удалить элемент или изменить src
, дождаться завершения потока, а затем назначить его обратно. Если страница все еще кэшируется, это не требует сетевого обращения, но вызывает перезагрузку кадра.
var old = iframe.src;
iframe.src = '';
setTimeout( function () {
iframe.src = old;
}, 0);
Обновление : При использовании этого подхода создаются ненужные элементы истории. Вместо этого каждый раз удаляйте и воссоздайте элемент iframe, благодаря чему эта кнопка назад () работает должным образом. Также приятно не иметь таймера.