1. 程式人生 > >iframe高度寬度自適應

iframe高度寬度自適應

最近在專案中用到了iframe,寫出來做個記錄,能幫到大家最好。

一.首先簡單介紹一下iframe

     iframe 元素會建立包含另外一個文件的內聯框架(即行內框架)。

    所有瀏覽器都支援 <iframe> 標籤。

二.頁面引用

<iframe src="index.html" id="myiframe" scrolling="no" frameborder="0" width="100%" onload="changeFrameHeight()" frameborder="0"></iframe>

三.設定iframe的高度自適應     

<!--set iframe height  -->
    <script type="text/javascript">
        function changeFrameHeight(){
            var iframe= document.getElementById("myiframe");
            iframe.height = iframe.contentDocument.body.clientHeight;
        }
        window.onresize=function(){
            changeFrameHeight();
        }
    </script>

四.設定iframe的寬度自適應

iframe的使用是為了引入一個子頁面,如果說子頁面是自適應的,那麼寬度自適應自然很容易解決。
但是如果子頁面是通過內容編輯器生成並且沒有做自適應處理,那麼問題就沒那麼簡單了。
或許你會用viewport進行解決,這個也是一個思路,但是子頁面與主頁面的viewport之間的關聯需要處理。

我說的這種情況自然不是用viewport。而是使用-webkit-transform:scale();對iframe進行縮放。實現裝置是iPhone8與華為P8高配版。

首先說明,iframe的寬度如果不能自適應那麼在兩個裝置的展現情況不一樣。iPhone上邊可以左右滾動以檢視所有的內容,但是在安卓上邊會自動擷取手機螢幕寬度的iframe,也就是不會左右滾動。參考資料:https://www.cnblogs.com/qiuer/p/6420130.html

http://blog.csdn.net/u011511086/article/details/78519681

其次介紹一下有關-webkit-transform:scale();的用法,參考資料:http://caibaojian.com/transform.html

http://www.w3school.com.cn/cssref/pr_transform.asp

整體的思想就是計算出手機寬度與iframe內容寬度的比例,然後按照這個比例進行縮放,即-webkit-transform:scale();的作用。

所以就要獲得兩個寬度的值。

獲取iframe的不同型別的寬度:Android  iPhone 手機瀏覽器獲取子頁面寬度。
    // var phoneWidth = document.body.clientWidth;//手機寬度
    // var iframeWidth = document.getElementById("myiframe").contentWindow.document.body.offsetHeight;//iframe寬度
    // 360  2602 ->  375 2628

    // var phoneWidth = document.body.clientWidth;//手機寬度
    // var iframeWidth = document.getElementById("myiframe").contentDocument.body.clientWidth;//iframe寬度
    // 360  310  ->  375 876

    // var phoneWidth = document.body.clientWidth;//手機寬度
    // var iframeWidth = document.body.scrollWidth;//iframe寬度
    // 360  360  ->  375 910

    // var phoneWidth = document.body.clientWidth;//手機寬度
    // var iframeWidth = document.getElementById("myiframe").contentWindow.document.body.scrollWidth;//iframe寬度
    // 360  884  ->  375 892  採用的這一種。

註釋:箭頭前是安卓裝置,之後是蘋果裝置。第一個數是手機寬度,第二個數是iframe的寬度。

核心程式碼:

var obj = document.getElementById("myiframe");
        var phoneWidth = document.body.clientWidth;//手機寬度
        var iframeWidth = document.getElementById("myiframe").contentWindow.document.body.scrollWidth;//iframe寬度
        var n = phoneWidth/iframeWidth;//縮放比例

        if (userAgentInfo.indexOf('Android') > -1 || userAgentInfo.indexOf('Linux') > -1) {
            obj.width = iframeWidth + "px";
        }
        obj.style.webkitTransform="scale("+ n +")";

以上測試均是真機測試,瀏覽器包括QQ瀏覽器安卓與蘋果版本,以及蘋果和安卓的自帶瀏覽器。

經過縮放之後會出現左右滑動,但是內容區域已經適應了手機寬度,這時再用document.body.style.overflowX="hidden";禁止左右滾動即可。以上均是自己的見解,如有不足之處還望多多見諒。

五.iframe的屬性

iframe常用屬性:
  1.frameborder:是否顯示邊框,1(yes),0(no)
  2.height:框架作為一個普通元素的高度,建議在使用css設定。
  3.width:框架作為一個普通元素的寬度,建議使用css設定。
  4.name:框架的名稱,window.frames[name]時專用的屬性。
  5.scrolling:框架的是否滾動。yes,no,auto。
  6.src:內框架的地址,可以使頁面地址,也可以是圖片的地址。
  7.srcdoc , 用來替代原來HTML body裡面的內容。但是IE不支援, 不過也沒什麼卵用
  8.sandbox: 對iframe進行一些列限制,IE10+支援


六.iframe參考文件

https://segmentfault.com/a/1190000004502619#articleHeader6
https://www.cnblogs.com/inJS/p/6129945.html
http://www.cnblogs.com/tugenhua0707/p/3346522.html



相關推薦

iframe高度寬度適應

最近在專案中用到了iframe,寫出來做個記錄,能幫到大家最好。一.首先簡單介紹一下iframe     iframe 元素會建立包含另外一個文件的內聯框架(即行內框架)。    所有瀏覽器都支援 <iframe> 標籤。二.頁面引用<iframe src=

CSSHTML實現高度寬度適應

首先說明 auto 和 100%是不一樣的,100%是根據元素的畫素有關的,auto是自動的。 舉個例子:給box下新增一個div高度是100%,這時候div高度為box高度300px, 這時候如果給這個div設定padding,那麼這個div的高度等於box的高度+padding的畫素之和。 再說一個知識

單頁面多Highcharts圖形,高度寬度適應

資料圖形展示頁面,四個圖形,上邊倆,下邊倆,客戶機的解析度不同,所以如果把圖形的寬度高度寫死,那麼會造成螢幕顯示不友好,抽空想了下,很簡單 先讓圖形浮動,程式碼很簡單:<div> <div id="container1" style="min-w

css實現div高度根據適應寬度(百分比)調整

在如今響應式佈局的要求下,很多能自動調整尺寸的元素能夠做到高寬自適應,如img,通過{width:50%;height:auto;}實現圖片高度跟隨寬度比例調整。 然而,用的最多的標籤一哥Div卻不能做到自動調整(要麼從父級繼承,要麼自行指定px,要麼給百分比!但是這個

在做iframe適應的時候,iframe高度不斷增長

如果iframe裡面的網頁是這樣的 <html style="height:100%"> <body style="height:100%"> <div style="margin-top:10px"> </div> <

div或img圖片高度寬度適應

該方法主要用來做網站自適應的,同時可以實現撐起內容高度,避免圖片載入後導致的頁面滾動。一、可以使用js判斷圖片的寬度得到具體數值之後,再來利用js設定圖片的高度(這裡就不具體為大家細說了)。利用js來實現有一個缺點就是隻能在頁面重新整理的時候才能調整圖片的高度,不能隨著瀏覽器

CSS練習絕對定位於頁面寬度適應

ear family vertica 寬度 content back left display splay <!DOCTYPE html> <html> <head> <title>九宮格布局</title&g

手機站常用的底部導航條,寬度適應

nbsp class ges posit oat cdn bootstrap image 100% <!DOCTYPE html> <html> <head> <meta charset="utf-8">

保持寬高比的寬度適應盒子

示例代碼 clas code height pad wid 圖片 color relative 基本原理 元素的padding的百分比值是基於其父元素的寬度計算的,如此,設置元素寬度width:25%,元素高度不設定,元素padding-bottom:75%,就可以得到一個

手機端適應字體大小和元素寬度適應

type 測試 nim AD ali jquery round 查詢 element 第一種,媒體查詢: @media (min-width:0px){ html{font-size:12px;} } @media (min-width: 320px){

使用min-content實現容器寬度適應於內部元素

強制 布局 sign 延伸 sid spl 顯示效果 exp ldr 前言 設計師可以分為如下兩類: 先做好設計,然後將內容放入靜態框架中 優秀的設計師充分考慮內容的各個方面及其上下文,並創建適合於內容的設計 HTML原生就是響應式的(HTML內容在視口內流式的分布)。

CSS-父元素寬度適應子元素寬度之和

line 原本 isp bottom over borde 子元素 段落 https 最近碰見這樣一個需求,要讓圖片橫向排列設置x方向的滾動條滾動查看,原本當直接創建一個IFC(inline,float什麽的)就解決了,搞了半天發現搞不定(IFC也是不能父元素寬度自適應子元

jeasyUI DataGrid 根據屏幕寬度適應

easy size class 瀏覽器 根據 wid 選擇 doc column PC瀏覽器的Datagrid可以顯示多幾列,但是在手機瀏覽器時,只能有選擇性的顯示前幾列. $(window).resize(function () {

Android開發中ScollView嵌套 WebView底部高度無法適應解決

hbase get ride web algorithm 接口 試驗 splay 網頁加載 最近要做一個頁面,需要 ScrollView 嵌套 WebView,怎麽嵌套,怎麽解決焦點和 touch 事件沖突,網上一大堆,這裏就不贅述了,但是發現 WebView 從一個高度很

easyui datagrid 高度佈局適應

最近在把以前寫的一個專案改成用easyui做前端。過程中遇到了不少問題。其中一個就是datagrid不能很好的佈局。想了好多辦法都有侷限。最後想到會不會是佈局(easyui-layout)的問題,經過實驗,最後問題解。 1:比如在專案中用到了datagrid。如果介面比較簡單---只有一個d

comboBox 下拉寬度適應

rap com count send mbo 寬度 eas obj table ///適用combobox綁定datatable private void comboBox_DataSourceChanged(object sender, EventArgs e)

ExtJS4下拉列表框寬度適應

/** * 獲取下拉列表框定義 */ getBoxTextEditor: function (box_text_store) { //定義了下拉列表框 var editor = new Ext

Android WebView 圖片超出寬度適應,點選檢視大圖

webView 配置  WebSettings webSettings = webView.getSettings(); webSettings.setJava

HTML中--定義header和footer高度中間適應

<html> <head> <meta charset="utf-8" /> <title></title> <style> html,

display:flex實現一端固定,另一端寬度適應

1,text-align屬性具有繼承性,外部div內嵌div時,外部text-align失效,而內部div繼承了外部的text-align;則內部div只好使用margin:auto來實現水平居中; 2,當某個元素(比如div)使用inline-block的時候,如果內部含有元素(比如含有p,h