Mam dwa elementy iframe na stronie i jeden wprowadza zmiany w drugim, ale drugi element iframe nie pokazuje zmiany, dopóki nie odświeżę. Czy istnieje łatwy sposób na odświeżenie tego elementu iframe za pomocą jQuery?
<div class="project">
<iframe id="currentElement" class="myframe" name="myframe" src="http://somesite.com/something/new"></iframe>
</div>
javascript
jquery
html
iframe
Matt Elhotiby
źródło
źródło
Odpowiedzi:
Jeśli element iframe nie znajdował się w innej domenie, możesz zrobić coś takiego:
Ale ponieważ element iframe znajduje się w innej domenie, nie będzie można uzyskać dostępu do
contentDocument
właściwości elementu iframe na podstawie zasad tego samego pochodzenia .Możesz jednak wymusić ponowne załadowanie międzydomenowego elementu iframe, jeśli kod jest uruchomiony na stronie nadrzędnej elementu iframe, ustawiając jego atrybut src na siebie. Lubię to:
Jeśli próbuje przeładować iframe z innej iframe, masz pecha, że to nie możliwe.
źródło
document.getElementById(FrameID).contentWindow.location.reload(true);
iframe.contentDocument.location=iframe.src;
zamiast tego zrobiłem coś takiego, co zadziałało świetnie$('#map_iframe').attr('src', $('#map_iframe').attr('src'));
źródło
(function (elem) { elem.src = elem.src; }($('#iframe')[0]));
document.getElementById(FrameID).contentWindow.location.reload(true);
nie działają poprawnie. Ta odpowiedź działa lepiej.możesz także użyć jquery. To jest to samo, co Alex zaproponował po prostu używając JQuery:
źródło
var f = $('#iframeX') ; f.attr( 'src', f.attr( 'src' ))
może być bardziej wytrzymały w utrzymaniu i czytaniuZaładuj ponownie iframe za pomocą jQuery
stwórz link wewnątrz iframe, powiedzmy z id = "reload", a następnie użyj następującego kodu
i możesz korzystać ze wszystkich przeglądarek.
Załaduj ponownie ramkę iframe za pomocą HTML (brak wymagania Java Script)
Ma prostsze rozwiązanie: działa bez javaScript w (FF, Webkit)
po prostu zrób kotwicę w swoim elemencie iframe
Po kliknięciu tej kotwicy po prostu odświeży element iframe
Ale jeśli masz parametr wysyłany do elementu iframe, zrób to w następujący sposób.
nie potrzebujesz adresu URL strony, ponieważ -> target = "_ SELF" zrobi to za Ciebie
źródło
z jquery możesz użyć tego:
źródło
Po prostu odwzajemniam odpowiedź Alexa, ale za pomocą jQuery
źródło
Oto inny sposób
źródło
$( '#iframe' ).attr('src', $( '#iframe' ).attr('src'));
Jestem prawie pewien, że wszystkie powyższe przykłady tylko przeładowują iframe z oryginalnym src, a nie z bieżącym adresem URL.
Powinno to zostać ponownie załadowane przy użyciu bieżącego adresu URL.
źródło
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.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.
źródło
Po prostu odwzajemniam odpowiedź Alexa, ale z jQuery:
Lub możesz użyć małej funkcji:
Mam nadzieję, że to pomoże.
źródło
źródło
Jest to możliwe dzięki prostemu JavaScriptowi.
window.frames
składni do uruchomienia funkcji JavaScript w iframe2. Po prostu upewnij się, że używaszid
/name
z iframe2, a niesrc
.źródło
// odśwież wszystkie ramki iframe na stronie
źródło
rozwiązanie dla różnych przeglądarek to:
jest to przydatne zwłaszcza, gdy <iframe> jest celem <form>
źródło
ROZWIĄZANY! Rejestruję się do stockoverflow tylko po to, aby udostępnić Ci jedyne rozwiązanie (przynajmniej w ASP.NET/IE/FF/Chrome), które działa! Chodzi o to, aby zastąpić wartość innerHTML elementu div jego bieżącą wartością innerHTML.
Oto fragment kodu HTML:
I mój kod Javascript:
Mam nadzieję że to pomoże.
źródło
runat="server"
nie ma zastosowania; 2. Dlaczego wszystkie czapkiIFRAME
? 3. wartości atrybutów wymiarów nie mają jednostek; 4.frameborder
jest przestarzałyMusisz użyć
aby znaleźć źródło elementu iframe i jego adres URL, muszą znajdować się w tej samej domenie elementu nadrzędnego.
źródło
możesz to zrobić w ten sposób
źródło
Poniższe rozwiązanie na pewno zadziała:
źródło