碎碎:這兩天在實踐中,用到了 iframe,以前對其不甚瞭解,瞭解之中遇到好多奇葩問題,今天記錄下這兩天遇到的相關的內容。html
//HTML 元素:主要有 src: 要嵌入的頁面 <iframe id="framePage" src="iframe/inner_page.jsp"></iframe>
// 默認有邊框: 新建測試文件,命名:test_iframe01.html,內容以下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head>
//爲了方便區別,對應設置了樣式 <style> .iframe_page{ width: 400px; height: 260px; background-color: #dfdfdf; //爲了方便區別,設置背景樣式 } .iframe_page #framePage{ width: 300px; height: 200px; background-color: #adb9cd; //爲了方便區別,設置背景樣式 } </style> <body> <!-- 嵌入 iframe 模塊 --> <div class="iframe_page"> <iframe id="framePage" src="inner_page.html"></iframe> </div> </body> </html>
運行顯示以下:jquery
能夠看到 iframe 嵌入頁面,相似層級摞在上面(即 iframe層 壓在原來頁面上層),且外面有白色邊框顯示,這就是 iframe 默認顯示樣式。web
frameborder 有兩種屬性值: 1. frameborder="0"; //無邊框顯示 2. frameborder="1"; //有邊框顯示 (默認狀態,且邊框爲白色)
eg: 只需將上面文件中的 iframe 標籤內容添加上 frameborder="0" 便可,此時所有代碼以下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <style> .iframe_page{ width: 400px; height: 260px; background-color: #dfdfdf; } .iframe_page #framePage{ width: 300px; height: 200px; background-color: #adb9cd; } </style> <body> <!-- 嵌入 iframe 模塊 --> <div class="iframe_page"> <iframe id="framePage" src="inner_page.html" frameborder="0"></iframe> </div> </body> </html>
執行後就會看到上面的白色邊框消失,以下:chrome
固然,若想層級顯示,但不想要默認的邊框時,咱們能夠自行設置邊框,只需給對應 iframe 頁面設置樣式時,添加上邊框設置
以下:給 id="framePage" 的 iframe 設置 border 屬性,添加後樣式以下: .iframe_page #framePage{ width: 300px; height: 200px; background-color: #adb9cd; border: 3px dashed #cc9797; //設置 iframe邊框樣式 } 更改後的完整代碼以下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <style> .iframe_page{ width: 400px; height: 260px; background-color: #dfdfdf; } .iframe_page #framePage{ width: 300px; height: 200px; background-color: #adb9cd; border: 3px dashed #cc9797; //更改iframe邊框樣式 } </style> <body> <!-- 嵌入 iframe 模塊 --> <div class="iframe_page"> <iframe id="framePage" src="inner_page.html"></iframe> </div> </body> </html>
運行後效果以下:
網上說背景透明
1. 需對<iframe>標籤設置 allowtransparency 屬性: allowtransparency="true" //背景透明, 前提不能設置 iframe 的背景樣式 2. 並對 <iframe>標籤引用的 src="***.html" 文件中設置: <body style="background-color:transparent"> 或 <body bgcolor="transparent">
但我測試 iframe 標籤 設置allowtransparency=true 與 iframe 背景樣式不設置效果同樣, 都是沒有背景(即,默認父元素背景樣式)
!!綜合來講:沒找到使背景透明的方法,若是有人知道麻煩告知,謝謝~~
以下: 需在 iframe 樣式設置時,添加背景設置,具體代碼以下:
.iframe_page #framePage{ width: 300px; height: 200px; background-color: #adb9cd; //設置嵌入的iframe背景 border: 3px dashed #cc9797; }
總體代碼以下:瀏覽器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <style> .iframe_page{ width: 400px; height: 260px; background-color: #dfdfdf; } .iframe_page #framePage{ width: 300px; height: 200px; background-color: #adb9cd; //更改嵌入的 iframe 背景顏色 border: 3px dashed #cc9797; } </style> <body> <!-- 嵌入 iframe 模塊 --> <div class="iframe_page"> <iframe id="framePage" src="inner_page.html"></iframe> </div> </body> </html>
查到資料顯示,有兩種方式:
以下: <iframe id="framePage" align="right" allowtransparency="true" src="inner_page.html" frameborder="0"></iframe>
以下: .iframe_page #framePage{ width: 600px; height: 300px; background-color: #adb9cd; border: 3px dashed #cc9797; float: right
上述二者效果同樣,但其經常使用屬性值只有: left, right, 並無達到咱們想要的居中效果
解決辦法: 可以讓 iframe 外層的 div 元素居中,並可設置 iframe 與 外層div大小徹底相同,便可實現居中jsp
以下: .iframe_page{ margin: 0 auto; width: 400px; height: 260px; background-color: #dfdfdf; } .iframe_page #framePage{ width: 400px; height: 260px; background-color: #adb9cd; border: 3px dashed #cc9797; }
完整代碼以下:ide
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <style> .iframe_page{ margin: 0 auto; width: 400px; height: 260px; background-color: #dfdfdf; } .iframe_page #framePage{ width: 400px; height: 260px; background-color: #adb9cd; border: 3px dashed #cc9797; } </style> <body> <!-- 嵌入 iframe 模塊 --> <div class="iframe_page"> <iframe id="framePage" src="inner_page.html"></iframe> </div> </body> </html>
1. 顯示滾動條:scrolling="yes" 或 scrolling="auto" (超出邊框自動顯示滾動條,且可滾動) 2. 不顯示滾動條: scrolling="no" (始終不顯示滾動條,且超出部分不能滾動)
overflow 樣式(橫/縱)選項有: 1. 顯示滾動條,內容剪切,可滾動:overflow: scroll; //等價於 overflow: auto; 2. 不顯示滾動條,內容不可見,不可滾動:overflow: hidden; 3. 不顯示滾動條,內容超出框,不可滾動:overflow: visible; 4. inherit: 繼承父元素 overflow 屬性
橫向/縱向 單項設置:overflow-x 或 overflow-y 屬性值同 overflow
總結以上樣式: 1. 滾動條顯示 且 可滾動查看內容 2. 滾動條不顯示 且 不可滾動查看內容
這不是咱們想要的 滾動條不顯示 但 可滾動查看內容,便可以自定義滾動條樣式
查詢資料顯示可設置測試
1. 父頁面標準<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 要改成 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2. 設置iframe頁面: body, html{ scrollbar-3dlight-color:#D4D0C8; /*- 最外左 -*/ scrollbar-highlight-color:#fff; /*- 左二 -*/ scrollbar-face-color:#E4E4E4; /*- 面子 -*/ scrollbar-arrow-color:#666; /*- 箭頭 -*/ scrollbar-shadow-color:#808080; /*- 右二 -*/ scrollbar-darkshadow-color:#D7DCE0; /*- 右一 -*/ scrollbar-base-color:#D7DCE0; /*- 基色 -*/ scrollbar-track-color:#;/*- 滑道 -*/ }
我測試以後徹底不行,卡殼了幾天,最終採用插件完成,在此推薦 jquery.nicescroll.min.js 插件spa
jquery.nicescroll v3.7.6
1. 支持div,iframe,html 等
2. 兼容IE7-8,safari,firefox,webkit內核瀏覽器(chrome,safari)以及智能終端設備瀏覽器的滾動條
3. jq插件,jq 版本要高於 1.8
cursorcolor - 設置滾動條顏色,默認值是「#000000」 cursoropacitymin - 滾動條透明度最小值 cursoropacitymax - 滾動條透明度最大值 cursorwidth - 滾動條的寬度像素,默認爲5(你能夠寫「5PX」) cursorborder - CSS定義邊框,默認爲「1px solid #FFF」 cursorborderradius - 滾動條的邊框圓角 ZIndex的 - 改變滾動條的DIV的z-index值,默認值是9999 scrollspeed - 滾動速度,默認值是60 mousescrollstep - 滾動鼠標滾輪的速度,默認值是40(像素) touchbehavior - 讓滾動條能拖動滾動觸摸設備默認爲false hwacceleration - 使用硬件加速滾動支持時,默認爲true boxzoom - 使變焦框的內容,默認爲false dblclickzoom - (僅當boxzoom = TRUE)變焦啓動時,雙點擊框,默認爲true gesturezoom - boxzoom = true並使用觸摸設備)變焦(僅當激活時,間距/盒,默認爲true grabcursorenabled「搶」圖標,顯示div的touchbehavior = true時,默認值是true autohidemode,如何隱藏滾動條的做品,真正的默認/「光標」=只光標隱藏/ FALSE =不隱藏的背景下,改變鐵路背景的CSS,默認值爲「」 iframeautoresize中,AUTORESIZE iframe上的load事件(默認:true) cursorminheight,設置最低滾動條高度(默認值:20) preservenativescrolling,您能夠用鼠標滾動本地滾動的區域,鼓泡鼠標滾輪事件(默認:true) railoffset,您能夠添加抵消頂部/左軌位置(默認:false) bouncescroll,使滾動反彈結束時的內容移動(僅硬件ACCELL)(默認:FALSE) spacebarenabled,容許使用空格鍵滾動(默認:true) railpadding,設置間距(默認:頂:0,右:0,左:0,底部:0}) disableoutline,Chrome瀏覽器,禁用綱要(橙色hightlight)時,選擇一個div nicescroll(默認:true)
使用 jquery.nicescroll.min.js 插件設置的 iframe 滾動條樣式,舉例:firefox
<!--<!DOCTYPE html>--> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p>歲月</p> <p>歲月</p> <p>歲月</p> <p>歲月</p> <p>歲月</p> <p>歲月</p> <p>歲月</p> <p>歲月</p> <p>歲月</p> <p>歲月</p> <p>歲月</p> <p>歲月</p> <p>歲月</p> <p>歲月</p> <p>歲月</p> <p>歲月</p> <p>歲月</p> <p>歲月</p> <p>歲月</p> <p>歲月</p> <p>歲月</p> <p>歲月</p> <p>歲月</p> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> <script src="jquery.nicescroll.min.js"></script> </head> <style> .iframe_page{ width: 300px; height: 260px; background-color: #dfdfdf; } .iframe_page #myFrameId{ width: 280px; height: 240px; background-color: #adb9cd; border: 3px dashed #cc9797; } </style> <body style="scrollbar-base-color:red"> <!-- 嵌入 iframe 模塊 --> <div class="iframe_page"> <iframe id="myFrameId" src="inner_page.html"></iframe> </div> <script> $("#myFrameId").niceScroll({ cursorcolor: "#E62020", //滾動條顏色 cursoropacitymax: 0.5, //滾動條透明度 touchbehavior: false, cursorwidth:"5px", cursorborder:"0", cursorborderradius:"5px" }); </script> </body> </html>
運行結果以下:
方法1: iframe標籤訂義了 id 屬性,eg: <iframe id="myIframeId"></iframe> , 則 iframe 頁面 調用子頁面方法,可以使用document.getElementById('myIframeId').contentWindow.***(); /* 1. myIframeId: 爲 屬性 id 的值 * 2. ***()方法 寫在 子頁面(即 src 連接的文件)中 */ 方法2: iframe標籤訂義了 name 屬性,eg:<iframe name="myIframeName"></iframe> ,則 iframe 頁面調用子頁面方法,可以使用 myIframeName.window.***() /* 1. myIframeName: 爲 屬性 name 的值 * 2. ***()方法 寫在 子頁面(即 src 連接的文件)中 */
舉例: 主頁面(test.html -- 同時定義了 id 和 name)和子頁面(inner_page.html )具體內容以下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <style> .iframe_page{ width: 400px; height: 260px; background-color: #dfdfdf; } .iframe_page #framePage{ width: 300px; height: 200px; background-color: #adb9cd; border: 3px dashed #cc9797; } </style> <body> <!-- 嵌入 iframe 模塊 --> <div class="iframe_page"> <iframe name="myFrameName" id="myFrameId" src="inner_page.html" onload="callChildPage()"></iframe> </div> <script> /** * 父頁面方法:調用子頁面的方法 */ function callChildPage() { myFrameName.window.childSayHello(); //效果等價於 document.getElementById("framePage").contentWindow.childSayHello(); } </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <script> /** * 子頁面方法: 父頁面要調用的方法 */ function childSayHello() { alert('welcome: function in child'); } </script> </body> </html>
iframe src連接的子頁面 調用 iframe父頁面 方法,使用 window.parent.***();
/* 1. window.parent.***() 等價於 parent.***() //即 window 能夠省略
* 2. ***()方法 寫在 父頁面(即 iframe標籤所在的文件)中
*/
舉例: 主頁面(test.html)和子頁面(inner_page.html)具體內容以下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <style> .iframe_page{ width: 400px; height: 260px; background-color: #dfdfdf; } .iframe_page #framePage{ width: 300px; height: 200px; background-color: #adb9cd; border: 3px dashed #cc9797; } </style> <body> <!-- 嵌入 iframe 模塊 --> <div class="iframe_page"> <iframe id="framePage" src="inner_page.html"></iframe> </div> <script> /** * 父頁面方法: 子頁面要調用的方法 */ function parentSayHello() { alert('welcome: function in parent.'); } </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body onload="callParentFunc()"> <script> /** * 子頁面方法:用於調用父頁面方法 */ function callParentFunc() { window.parent.parentSayHello(); //等價於 parent.parentSayHello(); } </script> </body> </html>
總結 5-6,父窗口與子窗口方法調用
方法1:id 屬性法
1. HTML語法:<iframe id="myFrameId" src="child.html"></html> 2. 父窗口調用子窗口:
JS:document.getElementById("myFrameId").contentWindow.childMethod()
JQuery: $('#myFrameId')[0].contentWindow.childMethod(); 3. 子窗口調用父窗口:window.parent.parentMethod() 或 parent.parentMethod()
方法2:name 屬性法
1. HTML語法:<iframe name="myFrameName" src="child.html"></html> 2. 父窗口調用子窗口: myFrameName.window.childMethod() 3. 子窗口調用父窗口:window.parent.parentMethod() 或 parent.parentMethod()
注:
父頁面要改變子頁面某個標籤中的值,eg:改變id="button"的文字時,可用:
id 屬性法:document.getElementById("test").value = "調用結束";
name 屬性法:myFrameName.window.document.getElementById("button").value="調用結束";
子頁面要改變父頁面某個標籤中的值,eg:改變id="test"的文字時,可用:
id 屬性法:
JS:window.parent.document.getElementById("test").value = "調用結束";
JQuery:$(window.parent.document).contents().find("#test").val("調用結束");
name 屬性法:
parent.window.document.getElementById("button").value="調用結束";
有問題或有其餘的歡迎你們指導哈~~
後續繼續努力~~