iframe介紹 深入了解 /iframe有那些缺點/ Iframe傳值問題

余小魚
4 min readJun 4, 2018

--

由於之前做過一個舊架構專案 不得已都只能使用iframe當作app畫面頁面,也發生了iframe無法傳值的問題(跨域時 子頁面無法傳值回父頁面),這邊就來做iframe一些相關的筆記。

<iframe>

iframe就像網頁上面切出來的一個小窗戶,在這個窗戶內你可以看到其他網頁。iframe這個詞是inline frame的縮寫。

iframe常見用途

Google Map網頁嵌入一個網頁中-iframe的內容可以是任何html網頁

iframe屬性

1.frameborder:是否顯示邊框,1(yes),0(no)
2.height:height屬性指定了iframe的像素高度,建議使用css設置。
3.width:width屬性指定了iframe的像素寬度,建議使用css設置。
4.name:iframe的名稱,window.frames[name]時專用的屬性。
5.scrolling:iframe是否滾動。yes,no,auto。
6.src:iframe的網址。
7.sandbox:控制iframe內的權限(html5新功能),相关资料:http://www.html5rocks.com/en/tutorials/security/sandboxed-iframes/?redirect_from_locale=zhhttp://msdn.microsoft.com/en-us/hh563496.aspx

為什麼前端盡量少用iframe? iframe有哪些缺點

1.iframe会阻塞主頁面的Onload事件;
2.搜索引擎的檢索程序無法解讀這種頁面,不利於SEO;
3.iframe和主頁面共享連接池,而瀏覽器對同域的連接有限制,所以会影響頁面的並行加載。
連接池說明:http://www.importnew.com/8179.html

並行加載:同一时间针对同一域名下的请求。一般情况,iframe和所在页面在同一个域下面,而浏览器的并加载的数量是有限制的。如下图
  使用iframe之前需要考慮這兩個缺點。如果需要使用iframe,最好是通过javascript
動態给iframe添加src屬性值,这样可以避開以上兩個問題。
4.因为iframe等于打開一个新的網頁,所有的JS/CSS全部加載一遍,内存会*2
5.是否同域的問題
我们通常使用iframe最基本的特性,就是能自由操作iframe和父框架的内容(DOM)。
但前提條件是同域,如果跨域頂多只能實現頁面跳轉window.location.href。
同域時,父頁面可以对子頁面進行改寫,反之亦然。
不同域,父頁面没有權限改動子頁面,但可以實現頁面的跳轉。

跨域傳值,後來是使用

window.frames[0].postMessage($txt_val, ‘*’); 傳值

window.addEventListener(“message”, receiveMessage);取值

可參考

https://dotblogs.com.tw/daniel/2017/11/25/225511

https://blog.csdn.net/kenhins/article/details/50789125

參考

  1. https://www.zhihu.com/question/23683645
  2. http://blog.diginfos.com/index.php?r=article%2Fview&id=83
  3. https://dotblogs.com.tw/daniel/2017/11/25/225511
  4. https://www.cnblogs.com/dolphinX/p/3464056.html
  5. http://webfing.github.io/deep-in-iframe/

--

--