Sesuaikan lebar dan tinggi dari iframe sesuai dengan konten di dalamnya
Saya butuh solusi untuk auto-menyesuaikan the width
dan height
dari sebuah iframe
untuk hampir tidak cocok dengan isinya. Intinya adalah bahwa lebar dan tinggi dapat diubah setelah iframe
telah dimuat. Saya kira saya perlu sebuah acara aksi untuk berurusan dengan perubahan dimensi tubuh yang terkandung dalam iframe.
280
28
Lintas-browser jQuery plug-in.
Cross-browser, cross domain perpustakaan yang menggunakan
mutationObserver
untuk menjaga iFrame berukuran kandungan danpostMessage
untuk berkomunikasi antara iFrame dan host halaman. Bekerja dengan atau tanpa jQuery.Semua solusi yang diberikan sejauh ini akun hanya untuk sekali dari resize. Anda menyebutkan anda ingin dapat mengubah ukuran iFrame setelah isi yang dimodifikasi. Dalam rangka untuk melakukan ini, anda perlu untuk menjalankan fungsi di dalam iFrame (sekali isinya berubah, anda perlu untuk menembak sebuah acara untuk mengatakan bahwa isi telah berubah).
Aku terjebak dengan ini untuk sementara waktu, seperti kode di dalam iFrame tampaknya terbatas pada DOM di dalam iFrame (dan tidak't mengedit iFrame), dan kode yang dieksekusi di luar iFrame terjebak dengan DOM di luar iFrame (dan tidak't mengambil sebuah acara yang berasal dari dalam iFrame).
Solusi datang dari menemukan (melalui bantuan dari kolega) yang jQuery dapat mengatakan apa DOM untuk digunakan. Dalam hal ini, DOM induk jendela.
Dengan demikian, kode seperti ini tidak apa yang anda perlu (ketika berjalan di dalam iFrame) :
satu-liner solusi untuk embeds: dimulai dengan min-ukuran dan meningkatkan konten size. tidak perlu untuk tag script.
Jika iframe konten ini dari domain yang sama ini harus bekerja besar. Ini tidak memerlukan jQuery sekalipun.
Untuk mengubah ukuran secara dinamis anda bisa melakukan hal ini:
Kemudian pada halaman yang iframe beban tambahkan ini:
Berikut ini adalah cross-browser solusi jika anda don't ingin menggunakan jQuery:
Saya menggunakan kode ini untuk autoadjust tinggi dari semua iframe (dengan kelas autoHeight) ketika mereka beban pada halaman. Diuji dan bekerja di IE, FF, Chrome, Safari dan Opera.
Setelah saya telah mencoba segala sesuatu di bumi, ini benar-benar bekerja untuk saya.
index.html
Ini adalah bukti kuat solusi
html
Jika anda dapat mengontrol konten IFRAME dan jendela induk maka anda perlu iFrame Resizer.
Perpustakaan ini memungkinkan otomatis mengubah ukuran tinggi dan lebar yang sama dan cross domain iframe cocok untuk mereka yang terkandung konten. Ini menyediakan berbagai fitur untuk mengatasi masalah yang paling umum dengan menggunakan iframe, ini termasuk:
Aku sedikit dimodifikasi Garnaph's solusi yang bagus di atas. Sepertinya solusi nya dimodifikasi iframe ukuran berdasarkan ukuran yang tepat sebelum acara. Untuk situasi saya (email pengiriman via iframe) yang saya butuhkan iframe height berubah setelah pengajuan. Misalnya menunjukkan kesalahan validasi atau "terima kasih" pesan setelah pengajuan.
Aku hanya dihilangkan bersarang klik() fungsi dan memasukkannya ke saya iframe html:
Bekerja untuk saya, tapi tidak yakin tentang fungsi lintas browser.
Berikut ini adalah beberapa metode:
DAN ALTERNATIF LAIN
UNTUK MENYEMBUNYIKAN BERGULIR DENGAN 2 ALTERNATIF SEPERTI YANG DITUNJUKKAN DI ATAS
HACK DENGAN KODE KEDUA
Untuk menyembunyikan scroll-bar iFrame, orang tua adalah membuat "overflow:hidden" untuk menyembunyikan scrollbar dan iFrame dibuat untuk pergi upto 150% lebar dan ketinggian yang memaksa scroll-bar di luar halaman dan karena tubuh doesn't memiliki scroll-bar yang satu mungkin tidak mengharapkan iframe yang akan melebihi batas halaman. Ini menyembunyikan scrollbar iFrame dengan lebar penuh!
sumber: set iframe auto tinggi
semua tidak dapat bekerja menggunakan metode di atas.
javascript:
html:
Env: IE 10, Windows 7 x64
Aku tahu solusi lain setelah beberapa percobaan. Saya awalnya mencoba kode yang ditandai sebagai 'jawaban terbaik' untuk pertanyaan ini dan itu didn't bekerja. Dugaan saya adalah karena saya iframe di program saya pada saat itu adalah yang dihasilkan secara dinamis. Berikut adalah kode yang saya digunakan (ini bekerja untuk saya):
Javascript di dalam iframe yang sedang dimuat:
Berikut adalah kode html untuk iframe:
Berikut adalah semua kode dalam iframe:
Saya telah melakukan pengujian di chrome dan sedikit di firefox (windows xp). Saya masih memiliki lebih banyak pengujian yang harus dilakukan, jadi tolong katakan padaku bagaimana ini bekerja untuk anda.
Ini adalah bagaimana saya akan melakukannya (diuji di FF/Chrome):
Saya menemukan ini resizer untuk bekerja lebih baik:
Perhatikan gaya objek dihapus.
Dalam kasus seseorang mendapatkan ke sini: Saya punya masalah dengan solusi ketika saya dihapus divs dari iframe - iframe tidak ada yang lebih pendek.
Ada sebuah plugin Jquery yang melakukan pekerjaan:
http://www.jqueryscript.net/layout/jQuery-Plugin-For-Auto-Resizing-iFrame-iFrame-Resizer.html
Dalam jQuery, ini adalah pilihan terbaik untuk saya, yang benar-benar membantu saya!! Aku menunggu bantuan anda!
iframe
jQuery
Javascript yang akan ditempatkan di header:
Di sini berjalan iframe html:
Css stylesheet
Konteks
Aku harus melakukan ini sendiri dalam konteks web-ekstensi. Web ini-ekstensi menyuntikkan beberapa bagian dari UI ke masing-masing halaman, dan UI ini hidup di dalam
iframe
. Kandungan di dalamiframe
adalah dinamis, jadi saya harus menyesuaikan lebar dan tinggiiframe
itu sendiri.Saya menggunakan Bereaksi tapi konsep ini berlaku untuk setiap perpustakaan.
Solusi saya (ini mengasumsikan bahwa anda mengontrol halaman dan iframe)
Dalam
iframe
aku berubahtubuh
gaya untuk memiliki benar-benar besar dimensi. Hal ini akan memungkinkan elemen-elemen di dalam lay out menggunakan semua ruang yang diperlukan. Membuatwidth
danheight
100% tidak't bekerja untuk saya (saya kira karena iframe memiliki defaultwidth = 300px
danheight = 150px
)Kemudian saya disuntikkan semua iframe UI dalam sebuah div dan memberikannya beberapa gaya
Setelah rendering aplikasi saya dalam hal ini
#ui-root
(di Bereaksi saya melakukan hal ini dalamcomponentDidMount
) aku menghitung dimensi ini div suka dan sync mereka ke halaman induk menggunakanjendela.postMessage
:Di induk frame saya melakukan sesuatu seperti ini: