Potrzebuję rozwiązanie dla automatycznej regulacjiwidth
i height
od iframe
ledwo dopasować jego zawartość. Chodzi o to, że szerokość i wysokość można zmienić po iframe
załadowaniu. Chyba potrzebuję akcji zdarzenia, aby poradzić sobie ze zmianą wymiarów ciała zawartego w ramce iframe.
javascript
html
iframe
adjustment
Serce z kamienia
źródło
źródło
Odpowiedzi:
źródło
DOMContentLoaded
, ponieważDOMContentReady
wydaje się , że to nie jest coś: developer.mozilla.org/en-US/…Wtyczka jQuery dla różnych przeglądarek .
Cross-bowser, biblioteka obejmująca wiele domen, która
mutationObserver
utrzymuje rozmiar iFrame względem treści ipostMessage
komunikuje się między iFrame a stroną hosta. Działa z lub bez jQuery.źródło
Wszystkie dotychczasowe rozwiązania uwzględniają tylko jednorazową zmianę rozmiaru. Wspominasz, że chcesz zmienić rozmiar ramki iFrame po zmodyfikowaniu zawartości. Aby to zrobić, musisz wykonać funkcję w ramce iFrame (po zmianie zawartości musisz uruchomić zdarzenie, aby powiedzieć, że zawartość się zmieniła).
Utknąłem z tym przez chwilę, ponieważ kod wewnątrz iFrame wydawał się ograniczony do DOM wewnątrz iFrame (i nie mógł edytować iFrame), a kod wykonywany poza iFrame utknął z DOM poza iFrame (i nie mógł odebrać wydarzenie pochodzące z wnętrza iFrame).
Rozwiązanie pochodzi z odkrycia (dzięki pomocy kolegi), że jQuery można powiedzieć, z którego DOM korzystać. W takim przypadku DOM okna nadrzędnego.
Jako taki, kod taki jak ten robi to, czego potrzebujesz (po uruchomieniu w ramce iFrame):
źródło
jQuery("#IDofControlFiringResizeEvent").click(function ()
?jedno-liniowe rozwiązanie do osadzania: zaczyna się od rozmiaru minimalnego i zwiększa się do rozmiaru zawartości. nie potrzeba tagów skryptu.
źródło
scrollHeight/scrollWidth
powinny zostać nieco dostosowane, aby uwzględnić marginesy ciała. Przeglądarki stosują domyślne niezerowe marginesy dla elementu treści dokumentów (dotyczy to również treści ładowanych do ramek). Roztwór roboczy znalazłem jest dodanie tego:parseInt(window.getComputedStyle(this.contentDocument.body).margin
.Jeśli zawartość elementu iframe pochodzi z tej samej domeny, powinno to działać świetnie. Wymaga to jednak jQuery.
Aby zmienić rozmiar dynamicznie, możesz to zrobić:
Następnie na stronie ładowanej przez iframe dodaj:
źródło
Oto rozwiązanie dla różnych przeglądarek, jeśli nie chcesz używać jQuery:
źródło
Po wypróbowaniu wszystkiego na ziemi, to naprawdę działa dla mnie.
index.html
źródło
Korzystam z tego kodu, aby automatycznie dostosować wysokość wszystkich ramek iframe (z klasą autoHeight), gdy ładują się na stronie. Przetestowane i działa w IE, FF, Chrome, Safari i Opera.
źródło
To solidne rozwiązanie
HTML
źródło
Lekko zmodyfikowałem świetne rozwiązanie Garnaph powyżej. Wyglądało na to, że jego rozwiązanie zmodyfikowało rozmiar elementu iframe w oparciu o rozmiar tuż przed zdarzeniem. W mojej sytuacji (przesyłanie wiadomości e-mail za pośrednictwem elementu iframe) potrzebowałem zmienić wysokość elementu iframe bezpośrednio po przesłaniu. Na przykład pokaż błędy weryfikacji lub komunikat „dziękuję” po przesłaniu.
Właśnie wyeliminowałem zagnieżdżoną funkcję click () i umieściłem ją w html iframe:
Pracowałem dla mnie, ale nie jestem pewien co do funkcjonalności w różnych przeglądarkach.
źródło
Jeśli możesz kontrolować zarówno zawartość IFRAME, jak i okno nadrzędne, potrzebujesz iFrame Resizer .
Ta biblioteka umożliwia automatyczne zmienianie wysokości i szerokości zarówno tych samych, jak i między domenowych ramek iFrame w celu dopasowania ich zawartej zawartości. Zapewnia szereg funkcji rozwiązujących najczęstsze problemy z używaniem ramek iFrames, do których należą:
źródło
wszystko nie może działać przy użyciu powyższych metod.
javascript:
HTML:
Środowisko: IE 10, Windows 7 x64
źródło
Po eksperymentach wymyśliłem inne rozwiązanie. Początkowo próbowałem kodu oznaczonego jako „najlepsza odpowiedź” na to pytanie i nie zadziałało. Domyślam się, że mój iframe w moim programie w tym czasie był generowany dynamicznie. Oto kod, którego użyłem (zadziałało dla mnie):
JavaScript wewnątrz ładowanego elementu iframe:
Oto HTML dla iframe:
Oto cały kod w mojej ramce iframe:
Zrobiłem testy w Chrome i trochę w Firefoksie (w Windows XP). Mam jeszcze więcej testów, więc powiedz mi, jak to działa.
źródło
Tak bym to zrobił (testowany w FF / Chrome):
źródło
Oto kilka metod:
I KOLEJNA ALTERNATYWA
ABY UKRYĆ PRZEWIJANIE Z 2 ALTERNATYWAMI WYMIENIONYMI POWYŻEJ
HACK Z DRUGIM KODEM
Aby ukryć paski przewijania w ramce iFrame, element nadrzędny zostaje „przepełniony: ukryty” w celu ukrycia pasków przewijania, a ramka iFrame jest przesuwana w górę do 150% szerokości i wysokości, co powoduje, że paski przewijania są przesuwane poza stronę, a ponieważ ciało nie „ Aby mieć paski przewijania, nie można oczekiwać, że ramka iframe będzie przekraczać granice strony. Ukrywa paski przewijania ramki iFrame na całej szerokości!
źródło: ustaw automatyczną wysokość iframe
źródło
Na wypadek, gdyby ktoś się tutaj dostał: miałem problem z rozwiązaniami, kiedy usunąłem div z iframe - iframe nie był krótszy.
Istnieje wtyczka Jquery, która wykonuje to zadanie:
http://www.jqueryscript.net/layout/jQuery-Plugin-For-Auto-Resizing-iFrame-iFrame-Resizer.html
źródło
Uważam, że ten resizer działa lepiej:
Uwaga: obiekt stylu został usunięty.
źródło
W jQuery jest to dla mnie najlepsza opcja, która naprawdę mi pomaga !! Czekam, żeby ci pomóc!
iframe
jQuery
źródło
Kontekst
Musiałem to zrobić sam w kontekście rozszerzenia internetowego. To rozszerzenie internetowe wstrzykuje część interfejsu użytkownika na każdą stronę, a ten interfejs użytkownika znajduje się wewnątrz
iframe
. Zawartość wewnątrziframe
jest dynamiczna, więc musiałem dostosować szerokość i wysokośćiframe
samego siebie.Używam React ale ta koncepcja dotyczy każdej biblioteki.
Moje rozwiązanie (zakłada się, że kontrolujesz zarówno stronę, jak i ramkę iframe)
Wewnątrz
iframe
zmieniłembody
style, aby mieć naprawdę duże wymiary. Umożliwi to rozmieszczenie elementów w środku z wykorzystaniem niezbędnej przestrzeni. Tworzeniewidth
iheight
100% nie działało dla mnie (chyba dlatego, że iframe ma wartość domyślnąwidth = 300px
iheight = 150px
)Potem wstrzyknąłem interfejs użytkownika iframe do diva i nadałem mu trochę stylów
Po renderowaniu mojej aplikacji w tym
#ui-root
(w React robię to w środkucomponentDidMount
) obliczam wymiary tego div, jak i synchronizuję je ze stroną nadrzędną, używającwindow.postMessage
:W ramce nadrzędnej robię coś takiego:
źródło
Można stworzyć ramkę „przypominającą ducha”, która działa tak, jakby jej nie było.
Zobacz http://codecopy.wordpress.com/2013/02/22/ghost-iframe-crossdomain-iframe-resize/
Zasadniczo korzystasz z systemu zdarzeń
parent.postMessage(..)
opisanego w https://developer.mozilla.org/en-US/docs/DOM/window.postMessageDziała to we wszystkich nowoczesnych przeglądarkach!
źródło
Wiem, że post jest stary, ale wierzę, że jest to kolejny sposób na zrobienie tego. Właśnie zaimplementowałem mój kod. Działa idealnie zarówno przy ładowaniu strony, jak i przy zmianie rozmiaru strony:
źródło
JavaScript do umieszczenia w nagłówku:
Oto kod HTML iframe:
Arkusz stylów CSS
>
źródło
W przypadku atrybutu dyrektywy angularjs:
Zwróć uwagę na procent, wstawiłem go, abyś mógł przeciwdziałać skalowaniu wykonywanemu zwykle dla iframe, tekstu, reklam itp., Po prostu ustaw 0, jeśli skalowanie nie jest implementacją
źródło
Tak to zrobiłem onload lub kiedy rzeczy się zmieniają.
źródło
Oczywiście jest wiele scenariuszy, ale miałem tę samą domenę dla dokumentu i iframe i udało mi się rozwiązać to na końcu mojej zawartości iframe:
To „znajdzie” kontener nadrzędny, a następnie ustawia długość dodając współczynnik krycia 50 pikseli, aby usunąć pasek przewijania.
Nie ma nic, co „obserwowałoby” zmianę wysokości dokumentu, nie potrzebowałem tego w moim przypadku użycia. W mojej odpowiedzi przytaczam sposób odwoływania się do kontenera nadrzędnego bez użycia identyfikatorów upieczonych w treści nadrzędnej / iframe.
źródło
Jeśli możesz żyć ze stałym współczynnikiem kształtu i potrzebujesz responsywnego elementu iframe , ten kod będzie ci przydatny. To tylko zasady CSS.
Element iframe musi mieć div jako kontener.
Kod źródłowy jest oparty na tej stronie, a Ben Marshall ma dobre wyjaśnienie.
źródło
Prostota:
źródło
Jeśli treść jest po prostu bardzo prostym plikiem HTML, najprostszym sposobem jest usunięcie elementu iframe za pomocą javascript
Kod HTML:
Kod JavaScript:
źródło
źródło