Saya mencoba beberapa solusi tetapi tidak berhasil. Saya bertanya-tanya apakah ada solusi di luar sana yang lebih disukai dengan tutorial yang mudah diikuti.
iframe
cross-domain
J82
sumber
sumber
Jawaban:
Anda memiliki tiga alternatif:
1. Gunakan iFrame-resizer
Ini adalah perpustakaan sederhana untuk menjaga ukuran iFrames sesuai dengan kontennya. Ia menggunakan API PostMessage dan MutationObserver, dengan fallback untuk IE8-10. Ini juga memiliki opsi untuk halaman konten untuk meminta iFrame yang memuatnya berukuran tertentu dan juga dapat menutup iFrame setelah Anda selesai.
https://github.com/davidjbradshaw/iframe-resizer
2. Gunakan Easy XDM (kombinasi PostMessage + Flash)
Easy XDM menggunakan kumpulan trik untuk mengaktifkan komunikasi lintas domain antara jendela yang berbeda di sejumlah browser, dan ada contoh penggunaannya untuk pengubahan ukuran iframe:
http://easyxdm.net/wp/2010/03/17/resize-iframe-based-on-content/
http://kinsey.no/blog/index.php/2010/02/19/resizing-iframes-using-easyxdm/
Easy XDM bekerja dengan menggunakan PostMessage di browser modern dan solusi berbasis Flash sebagai fallback untuk browser lama.
Lihat juga utas ini di Stackoverflow (ada juga utas lainnya, ini adalah pertanyaan yang sering ditanyakan). Selain itu, Facebook tampaknya menggunakan pendekatan serupa .
3. Berkomunikasi melalui server
Pilihan lainnya adalah mengirim tinggi iframe ke server Anda dan kemudian melakukan polling dari server tersebut dari halaman web induk dengan JSONP (atau gunakan polling panjang jika memungkinkan).
sumber
Saya mendapat solusi untuk mengatur ketinggian iframe secara dinamis berdasarkan kontennya. Ini berfungsi untuk konten lintas domain. Ada beberapa langkah yang harus diikuti untuk mencapai ini.
Misalkan Anda telah menambahkan iframe di halaman web "abc.com/page"
<div> <iframe id="IframeId" src="http://xyz.pqr/contactpage" style="width:100%;" onload="setIframeHeight(this)"></iframe> </div>
Selanjutnya Anda harus mengikat jendela "pesan" acara di bawah halaman web "abc.com/page"
Saat memuat iframe, Anda harus mengirim pesan ke konten jendela iframe dengan pesan "FrameHeight":
sumber
Yang saya lakukan adalah membandingkan iframe scrollWidth hingga ukurannya berubah sementara saya secara bertahap menyetel Tinggi IFrame. Dan itu bekerja dengan baik untuk saya. Anda dapat menyesuaikan kenaikan apa pun yang diinginkan.
sumber
Saya memiliki skrip yang masuk ke iframe dengan isinya. Itu juga memastikan bahwa iFrameResizer ada (menyuntikkannya sebagai skrip) dan kemudian melakukan pengubahan ukuran.
Saya akan memberikan contoh yang disederhanakan di bawah ini.
Kemudian konten iframe dapat disuntikkan di mana saja di halaman / situs lain dengan menggunakan script seperti ini:
Konten iframe akan disuntikkan di bawah di mana pun Anda menempatkan tag skrip.
Semoga ini bermanfaat bagi seseorang. 👍
sumber
<script ... data-src="http://google.com">
dan mengisi src iframe dengannya.[email protected]
Inilah solusi sederhana saya di halaman ini. http://lab.ohshiftlabs.com/iframesize/
Inilah cara kerjanya;
Pada dasarnya jika Anda dapat mengedit halaman di domain lain, Anda dapat menempatkan halaman iframe lain milik server Anda yang menyimpan tinggi untuk cookie. Dengan cookie baca interval saat diperbarui, perbarui tinggi iframe. Itu semuanya.
Unduh; http://lab.ohshiftlabs.com/iframesize/iframesizepost.zip
Edit: 2019 Desember
Solusi di atas pada dasarnya menggunakan iframe lain di dalam iframe 3rd iframe milik domain halaman atas, yang Anda sebut halaman ini dengan string kueri yang menyimpan nilai ukuran ke cookie, halaman luar memeriksa kueri ini dengan beberapa interval. Tetapi ini bukan solusi yang baik jadi Anda harus mengikuti yang ini:
Di halaman atas:
Di sini Anda dapat memeriksa
m.origin
untuk melihat dari mana asalnya.Di halaman bingkai:
Meskipun, tolong jangan lupa ini bukan cara yang aman. Untuk membuatnya aman perbarui * nilai (targetOrigin) dengan nilai yang Anda inginkan. Ikuti dokumentasi: https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage
sumber
Saya menemukan solusi sisi server lain untuk web dev menggunakan PHP untuk mendapatkan ukuran iframe.
Pertama adalah menggunakan skrip server PHP ke panggilan eksternal melalui fungsi internal: (seperti file
file_get_contents
dengan tetapi curl dan dom).Anda perlu menampilkan di bawah div (
iframe_reserve
) html yang dihasilkan oleh pemanggilan fungsi dengan menggunakan simpleecho curl_get_file_contents("location url iframe","activation proxy")
Setelah melakukan ini, fungsi acara tubuh onload dengan javascript mengambil ketinggian halaman iframe hanya dengan kontrol sederhana dari div konten (
iframe_reserve
)Jadi saya biasa
divHeight = document.getElementById("iframe_reserve").clientHeight;
mendapatkan tinggi halaman eksternal yang akan kita panggil setelah menutupi div container (iframe_reserve
). Setelah ini kami memuat iframe dengan ketinggian yang bagus itu saja.sumber
Saya mengalami masalah ini saat mengerjakan sesuatu di tempat kerja (menggunakan React). Pada dasarnya, kami memiliki beberapa konten html eksternal yang kami simpan ke dalam tabel dokumen kami di database dan kemudian dimasukkan ke halaman dalam keadaan tertentu saat Anda berada di kumpulan data Dokumen.
Jadi, mengingat
n
sebaris, yang hinggan
dapat berisi html eksternal, kami perlu merancang sistem untuk secara otomatis mengubah ukuran iframe dari setiap sebaris setelah konten dimuat sepenuhnya di masing-masing. Setelah memutar roda saya sebentar, beginilah akhirnya saya melakukannya:message
event listener di indeks aplikasi React kami yang memeriksa kunci spesifik yang akan kami atur dari iframe pengirim.<script>
tag yang akan menunggu iframewindow.onload
diaktifkan. Setelah itu diaktifkan, kami menggunakanpostMessage
untuk mengirim pesan ke jendela induk dengan informasi tentang id iframe, tinggi yang dihitung, dll.id
dari iframe yang kita teruskan diMessageEvent
objekiframe
, cukup atur tinggi dari nilai yang diteruskan dari iframepostMessage
.sumber