Jeśli korzystasz z wielu domen, po prostu ustawienie źródła z powrotem na ten sam adres URL nie zawsze spowoduje ponowne załadowanie, nawet jeśli zmieni się skrót lokalizacji.
Napotkałem ten problem podczas ręcznego tworzenia ramek iframe przycisku Twittera, które nie odświeżyły się po zaktualizowaniu adresów URL.
Przyciski podobne do Twittera mają postać:
.../tweet_button.html#&_version=2&count=none&etc=...
Ponieważ Twitter używa fragmentu dokumentu jako adresu URL, zmiana hasha / fragmentu nie załadowała ponownie źródła, a cele przycisku nie odzwierciedlały mojej nowej treści załadowanej przez Ajax.
Możesz dołączyć parametr ciągu zapytania, aby wymusić ponowne załadowanie (np .: "?_=" + Math.random()
ale spowoduje to marnowanie przepustowości, szczególnie w tym przykładzie, gdzie podejście Twittera polegało na próbie włączenia buforowania.
Aby przeładować coś, co zmienia się tylko za pomocą tagów hash, musisz usunąć element lub zmienić src
, poczekaj na wyjście wątku, a następnie przypisz go z powrotem. Jeśli strona nadal znajduje się w pamięci podręcznej, nie powinno to wymagać trafienia w sieć, ale powoduje ponowne załadowanie ramki.
var old = iframe.src;
iframe.src = '';
setTimeout( function () {
iframe.src = old;
}, 0);
Aktualizacja : Korzystanie z tego podejścia tworzy niechciane elementy historii. Zamiast tego za każdym razem usuń i utwórz ponownie element iframe, dzięki czemu ten przycisk wstecz () działa zgodnie z oczekiwaniami. Miło też nie mieć timera.