Chciałbym ponownie załadować <iframe>
JavaScript. Najlepszym sposobem, jaki do tej pory znalazłem, było ustawienie src
atrybutu iframe na siebie, ale nie jest to zbyt czyste. Jakieś pomysły?
javascript
iframe
Caffo
źródło
źródło
src
atrybutu nie jest czyste? Wydaje się, że jest to jedyne rozwiązanie działające w różnych przeglądarkach i domenachsrc
atrybutu powoduje problemy, jeśli istnieje łącze w innym miejscu, na które jest kierowany<iframe>
. Następnie ramka pokaże początkową stronę w pierwotnym kształcie.Odpowiedzi:
uważaj, w przeglądarce Firefox
window.frames[]
nie można indeksować według identyfikatora, ale według nazwy lub indeksuźródło
frames[1].location.href.reload()
iwindow.frames['some_frame_id'].location.href.reload()
można go również stosowaćPrzeładuje
iframe
nawet w domenach! Testowane z IE7 / 8, Firefox i Chrome.źródło
document.getElementById('iframeid').src += '';
działa również: jsfiddle.net/Daniel_Hug/dWm5kreload
ale jest to dozwolone.http://example.com/#something
), To nie przeładuje ramki. Zastosowałem podejście polegające na dodaniu parametru zapytania typu „wyrzucanie”, takiego jak?v2
adres URL przed skrótem.Jeśli używasz jQuery, wydaje się, że działa:
Mam nadzieję, że nie jest to zbyt brzydkie jak na przepełnienie stosu.
źródło
var iframe = document.getElementById("your_iframe"); iframe.src = src;
var iframe = document.getElementById("your_iframe"); iframe.src = iframe.src;
Dodaj puste miejsce również automatycznie ładuje iFrame.
źródło
źródło
Ze względu na tę samą zasadę pochodzenia nie będzie to działać podczas modyfikowania elementu iframe wskazującego inną domenę. Jeśli możesz kierować reklamy do nowszych przeglądarek, rozważ użycie komunikacji między dokumentami w HTML5 . Przeglądarki obsługujące tę funkcję można wyświetlić tutaj: http://caniuse.com/#feat=x-doc-messaging .
Jeśli nie możesz korzystać z funkcji HTML5, możesz postępować zgodnie ze wskazówkami przedstawionymi tutaj: http://softwareas.com/cross-domain-communication-withframe . Wpis na blogu również dobrze opisuje problem.
źródło
Właśnie natknąłem się na to w chromie i jedyną rzeczą, która działała, było usunięcie i zastąpienie iframe. Przykład:
Całkiem proste, nie ujęte w innych odpowiedziach.
źródło
dla nowego adresu URL
Metoda assign () ładuje nowy dokument.
przeładować
Metoda reload () służy do ponownego załadowania bieżącego dokumentu.
źródło
Zwykłe zastąpienie
src
atrybutu elementu iframe nie było w moim przypadku zadowalające, ponieważ można było zobaczyć starą treść, dopóki nowa strona nie zostanie załadowana. Działa to lepiej, jeśli chcesz natychmiast uzyskać wizualną informację zwrotną:źródło
Udoskonalenie wpisu yajry ... Podoba mi się ta myśl, ale nienawidzę pomysłu wykrywania przeglądarki.
Wolę pogląd ppk na używanie wykrywania obiektów zamiast wykrywania przeglądarki ( http://www.quirksmode.org/js/support.html ), ponieważ wtedy faktycznie testujesz możliwości przeglądarki i działasz odpowiednio, zamiast jak myślisz, co potrafi przeglądarka w tym czasie. Nie wymaga też tak brzydkiego analizowania ciągu identyfikatora przeglądarki i nie wyklucza doskonale działających przeglądarek, o których nic nie wiesz.
Zamiast patrzeć na navigator.AppName, dlaczego nie zrobić czegoś takiego, faktycznie testując elementy, których używasz? (Możesz użyć bloków try {}, jeśli chcesz stać się jeszcze bardziej wyrafinowany, ale to zadziałało dla mnie.)
W ten sposób możesz wypróbować tyle różnych permutacji, ile chcesz lub jest to konieczne, bez powodowania błędów javascript i zrobić coś sensownego, jeśli wszystko inne zawiedzie. Jeszcze trochę pracy wymaga przetestowanie obiektów przed ich użyciem, ale IMO zapewnia lepszy i bardziej bezpieczny kod.
Pracowałem dla mnie w IE8, Firefox (15.0.1), Chrome (21.0.1180.89 m) i Opera (12.0.2) w systemie Windows.
Może mógłbym zrobić jeszcze więcej, testując funkcję przeładowania, ale teraz to mi wystarczy. :)
źródło
Teraz, aby to działało na chrome 66, spróbuj tego:
źródło
W IE8 przy użyciu .Net ustawienie po
iframe.src
raz pierwszy jest prawidłowe, ale ustawienieiframe.src
po raz drugi nie podnosipage_load
strony iframed. Aby go rozwiązać, użyłemiframe.contentDocument.location.href = "NewUrl.htm"
.Odkryj go, gdy używał jQuery thickBox i próbował ponownie otworzyć tę samą stronę w ramce iframe. Następnie pokazał tylko wcześniejszą otwartą stronę.
źródło
Użyj reload dla IE i ustaw src dla innych przeglądarek. (przeładowanie nie działa na FF) przetestowane na IE 7,8,9 i Firefox
źródło
Jeśli używasz Jquery, istnieje jeden kod wiersza.
a jeśli pracujesz z tym samym rodzicem, to
źródło
Jeśli wszystkie powyższe nie działają dla Ciebie:
To z jakiegoś powodu odświeżyło mój iframe zamiast całego skryptu. Może dlatego, że jest umieszczony w samej ramce, podczas gdy wszystkie te rozwiązania getElemntById działają, gdy próbujesz odświeżyć ramkę z innej ramki?
Albo nie rozumiem tego w pełni i nie mówię bełkotu, w każdym razie działało to dla mnie jak urok :)
źródło
Czy rozważałeś dodanie do adresu URL bez znaczenia parametru ciągu zapytania?
Nie będzie to widoczne, a jeśli wiesz, że parametr jest bezpieczny, powinno być dobrze.
źródło
Inne rozwiązanie.
źródło
var url = ifr.src; ifr.src = null; ifr.src = url;
Użycie
self.location.reload()
spowoduje ponowne załadowanie elementu iframe.źródło
źródło
Jeśli wypróbowałeś wszystkie inne sugestie i nie udało Ci się uruchomić żadnej z nich (tak jak ja nie mogłem), oto coś, co możesz wypróbować, co może być przydatne.
HTML
JS
Początkowo próbowałem zaoszczędzić trochę czasu dzięki RWD i testowaniu w różnych przeglądarkach. Chciałem stworzyć szybką stronę zawierającą kilka elementów iframe, zorganizowanych w grupy, które chciałbym pokazywać / ukrywać do woli. Logicznie rzecz biorąc, chcesz mieć możliwość łatwego i szybkiego odświeżenia dowolnej klatki.
Powinienem zauważyć, że projekt, nad którym obecnie pracuję, ten wykorzystywany w tym stanowisku testowym, jest jednostronicową witryną z indeksowanymi lokalizacjami (np. Index.html # home). To mogło mieć coś wspólnego z tym, że nie mogłem znaleźć żadnego z innych rozwiązań, aby odświeżyć moją ramkę.
Powiedziawszy to, wiem, że nie jest to najczystsza rzecz na świecie, ale działa na moje potrzeby. Mam nadzieję, że to komuś pomoże. Teraz gdybym tylko mógł wymyślić, jak powstrzymać iframe przed przewijaniem strony nadrzędnej za każdym razem, gdy wewnątrz iframe znajduje się animacja ...
EDYCJA: Zdałem sobie sprawę, że to nie „odświeża” iframe, jak się spodziewałem. Jednak przeładuje początkowe źródło iframe. Nadal nie mogę zrozumieć, dlaczego nie udało mi się uruchomić żadnej innej opcji.
AKTUALIZACJA: Powodem, dla którego nie udało mi się uruchomić żadnej z innych metod, jest to, że testowałem je w Chrome, a Chrome nie pozwala na dostęp do treści elementu iframe (Objaśnienie: Czy prawdopodobne jest, że przyszłe wydania zawartości obsługującej ChromeWindow / contentDocument, gdy iFrame ładuje lokalny plik HTML z lokalnego pliku HTML? ), jeśli nie pochodzi on z tej samej lokalizacji (o ile rozumiem). Po dalszych testach nie mogę również uzyskać dostępu do contentWindow w FF.
ZMIENIONY JS
źródło
W celu debugowania można otworzyć konsolę, zmienić kontekst wykonania na ramkę, którą chce się odświeżyć i zrobić
document.location.reload()
źródło