Aku membutuhkan solusi untuk auto-menyesuaikan dengan width
dan height
dari iframe
ke pas pasan isinya. Intinya adalah bahwa lebar dan tinggi dapat diubah setelah iframe
telah dimuat. Saya kira saya perlu aksi acara untuk menghadapi perubahan dimensi tubuh yang terkandung dalam iframe.
javascript
html
iframe
adjustment
StoneHeart
sumber
sumber
Jawaban:
sumber
DOMContentLoaded
, karenaDOMContentReady
sepertinya tidak menjadi apa-apa: developer.mozilla.org/en-US/…Plug-in jQuery lintas-browser .
Cross-bowser, pustaka lintas domain yang digunakan
mutationObserver
untuk menjaga ukuran iFrame pada konten danpostMessage
untuk berkomunikasi antara iFrame dan halaman host. Bekerja dengan atau tanpa jQuery.sumber
Semua solusi yang diberikan sejauh ini hanya memperhitungkan perubahan ukuran sekali saja. Anda menyebutkan bahwa Anda ingin dapat mengubah ukuran iFrame setelah kontennya diubah. Untuk melakukan ini, Anda perlu menjalankan fungsi di dalam iFrame (setelah konten diubah, Anda perlu memecat suatu acara untuk mengatakan bahwa konten telah berubah).
Saya terjebak dengan ini untuk sementara waktu, karena kode di dalam iFrame tampak terbatas pada DOM di dalam iFrame (dan tidak dapat mengedit iFrame), dan kode yang dieksekusi di luar iFrame macet dengan DOM di luar iFrame (dan tidak bisa ' t mengambil acara yang datang dari dalam iFrame).
Solusi datang dari menemukan (melalui bantuan dari kolega) bahwa jQuery dapat diberi tahu apa yang digunakan DOM. Dalam hal ini, DOM dari jendela induk.
Dengan demikian, kode seperti ini melakukan apa yang Anda butuhkan (ketika dijalankan di dalam iFrame):
sumber
jQuery("#IDofControlFiringResizeEvent").click(function ()
?solusi satu-liner untuk embed: dimulai dengan ukuran min dan naik ke ukuran konten. tidak perlu untuk tag skrip.
sumber
scrollHeight/scrollWidth
harus disesuaikan sedikit untuk memperhitungkan margin tubuh. Browser menerapkan margin bukan nol standar untuk elemen tubuh dokumen (dan juga berlaku untuk konten yang dimuat ke dalam bingkai). Solusi bekerja saya menemukan adalah untuk menambahkan ini:parseInt(window.getComputedStyle(this.contentDocument.body).margin
.Jika konten iframe berasal dari domain yang sama ini akan berfungsi dengan baik. Itu memang membutuhkan jQuery.
Untuk mengubah ukurannya secara dinamis, Anda dapat melakukan ini:
Lalu pada halaman yang memuat iframe tambahkan ini:
sumber
Ini adalah solusi lintas-browser jika Anda tidak ingin menggunakan jQuery:
sumber
Setelah saya mencoba semua yang ada di bumi, ini benar-benar bekerja untuk saya.
index.html
sumber
Saya menggunakan kode ini untuk memuat ulang ketinggian semua iframe secara otomatis (dengan kelas autoHeight) saat dimuat di halaman. Diuji dan berfungsi di IE, FF, Chrome, Safari, dan Opera.
sumber
Ini adalah solusi bukti yang solid
html
sumber
Saya sedikit mengubah solusi hebat Garnaph di atas. Sepertinya solusinya memodifikasi ukuran iframe berdasarkan ukuran tepat sebelum acara. Untuk situasi saya (pengiriman email melalui iframe) saya membutuhkan tinggi iframe untuk berubah tepat setelah pengiriman. Misalnya menunjukkan kesalahan validasi atau pesan "terima kasih" setelah pengiriman.
Saya baru saja menghilangkan fungsi klik bersarang () dan memasukkannya ke html iframe saya:
Bekerja untuk saya, tetapi tidak yakin tentang fungsionalitas lintas browser.
sumber
Jika Anda dapat mengontrol konten IFRAME dan jendela induk, maka Anda memerlukan iFrame Resizer .
Pustaka ini memungkinkan pengubahan ukuran otomatis dari tinggi dan lebar iFrames sama dan lintas domain agar sesuai dengan konten mereka. Ini menyediakan berbagai fitur untuk mengatasi masalah paling umum dengan menggunakan iFrames, ini termasuk:
sumber
semua tidak dapat bekerja menggunakan metode di atas.
javascript:
html:
Env: IE 10, Windows 7 x64
sumber
Saya menemukan solusi lain setelah beberapa percobaan. Saya awalnya mencoba kode yang ditandai sebagai 'jawaban terbaik' untuk pertanyaan ini dan tidak berhasil. Dugaan saya adalah karena iframe saya di program saya pada saat itu dihasilkan secara dinamis. Berikut adalah kode yang saya gunakan (ini berfungsi untuk saya):
Javascript di dalam iframe yang sedang dimuat:
Berikut ini adalah html untuk iframe:
Ini semua kode di dalam iframe saya:
Saya telah melakukan pengujian di chrome dan sedikit di firefox (di windows xp). Saya masih memiliki lebih banyak pengujian untuk dilakukan, jadi tolong beri tahu saya bagaimana ini bekerja untuk Anda.
sumber
Inilah yang akan saya lakukan (diuji dalam FF / Chrome):
sumber
Berikut ini beberapa metode:
DAN ALTERNATIF LAIN
UNTUK MENYEMBUNYAKAN SKROLLING DENGAN 2 ALTERNATIF SEPERTI YANG TAMPILKAN DI ATAS
HACK DENGAN KODE KEDUA
Untuk menyembunyikan bilah gulir iFrame, induk dibuat "overflow: disembunyikan" untuk menyembunyikan bilah gulir dan iFrame dibuat naik hingga 150% lebar dan tinggi yang memaksa bilah gulir di luar halaman dan karena badan tidak t memiliki bilah gulir yang mungkin tidak mengharapkan iframe melebihi batas halaman. Ini menyembunyikan bilah gulir iFrame dengan lebar penuh!
sumber: atur iframe auto height
sumber
Jika seseorang sampai di sini: Saya punya masalah dengan solusi ketika saya menghapus div dari iframe - iframe tidak menjadi lebih pendek.
Ada plugin Jquery yang berfungsi:
http://www.jqueryscript.net/layout/jQuery-Plugin-For-Auto-Resizing-iFrame-iFrame-Resizer.html
sumber
Saya menemukan pengubah ukuran ini berfungsi lebih baik:
Perhatikan objek gaya dihapus.
sumber
Di jQuery, ini adalah pilihan terbaik bagi saya, itu sangat membantu saya !! Saya menunggu itu membantu Anda!
iframe
jQuery
sumber
Konteks
Saya harus melakukan ini sendiri dalam konteks ekstensi web. Ekstensi web ini menyuntikkan sebagian UI ke setiap halaman, dan UI ini tinggal di dalam sebuah
iframe
. Konten di dalamnyaiframe
dinamis, jadi saya harus menyesuaikan kembali lebar dan tinggi dariiframe
dirinya sendiri.Saya menggunakan Bereaksi tetapi konsep ini berlaku untuk setiap perpustakaan.
Solusi saya (ini mengasumsikan bahwa Anda mengontrol halaman dan iframe)
Di dalam
iframe
saya mengubahbody
gaya untuk memiliki dimensi yang sangat besar. Ini akan memungkinkan elemen-elemen di dalam lay out menggunakan semua ruang yang diperlukan. Pembuatanwidth
danheight
100% tidak berfungsi untuk saya (saya kira karena iframe memiliki defaultwidth = 300px
danheight = 150px
)Lalu saya menyuntikkan semua iframe UI di dalam div dan memberikannya beberapa style
Setelah merender aplikasi saya di dalam ini
#ui-root
(dalam Bereaksi saya melakukan ini di dalamcomponentDidMount
) saya menghitung dimensi div ini seperti dan menyinkronkannya ke halaman induk menggunakanwindow.postMessage
:Dalam kerangka induk saya melakukan sesuatu seperti ini:
sumber
Dimungkinkan untuk membuat IFrame "seperti hantu" yang bertindak seperti itu tidak ada di sana.
Lihat http://codecopy.wordpress.com/2013/02/22/ghost-iframe-crossdomain-iframe-resize/
Pada dasarnya Anda menggunakan sistem acara yang
parent.postMessage(..)
dijelaskan dalam https://developer.mozilla.org/en-US/docs/DOM/window.postMessageIni berfungsi pada semua browser modern!
sumber
Saya tahu posnya sudah tua, tetapi saya yakin ini adalah cara lain untuk melakukannya. Saya baru saja menerapkan kode saya. Berfungsi sempurna baik pada pemuatan halaman dan pada ukuran halaman:
sumber
Javascript untuk ditempatkan di header:
Ini dia iframe kode html:
Lembar gaya css
>
sumber
Untuk atribut direktif angularjs:
Perhatikan persentasenya, saya menyisipkannya sehingga Anda dapat membalas penskalaan yang biasanya dilakukan untuk iframe, teks, iklan dll, cukup cantumkan 0 jika tidak ada penskalaan yang diterapkan
sumber
Ini adalah bagaimana saya melakukannya saat beban atau ketika segalanya berubah.
sumber
Jelas ada banyak skenario, namun, saya memiliki domain yang sama untuk dokumen dan iframe dan saya dapat menangani ini di akhir konten iframe saya:
Ini 'menemukan' wadah induk dan kemudian menetapkan panjang menambahkan pada faktor fudge 50 piksel untuk menghapus bilah gulir.
Tidak ada apa-apa di sana untuk 'mengamati' perubahan tinggi dokumen, ini saya tidak perlu untuk kasus penggunaan saya. Dalam jawaban saya, saya memang membawa referensi ke wadah induk tanpa menggunakan id yang dipanggang ke dalam konten induk / iframe.
sumber
Jika Anda dapat hidup dengan rasio aspek tetap dan Anda ingin iframe responsif , kode ini akan berguna bagi Anda. Itu hanya aturan CSS.
Iframe harus memiliki div sebagai wadah.
Kode sumber didasarkan pada situs ini dan Ben Marshall memiliki penjelasan yang bagus.
sumber
Kesederhanaan:
sumber
Jika kontennya hanya html yang sangat sederhana, cara paling sederhana adalah menghapus iframe dengan javascript
Kode HTML:
Kode Javascript:
sumber
sumber