使用的場景:
(1) 有重復的板塊內容顯示的時候
# 后端如果是模板渲染方式(得到頁面是通過繼承的形式),可以換成iframe來請求直接獲取子功能頁面
iframe標簽的作用:
iframe標簽可以實現html主頁面嵌套html子頁面,子頁面可以是一個功能頁面,在某些時候使用iframe非常的方便
# 所以如果是模板渲染方式的,前端就可以使用iframe標簽節省一點網絡帶寬(傳輸的內容會少一些,並且主頁面不會刷新,只是iframe在請求得到新的資源)。
模板渲染和iframe的對比:
(1) 子頁面通過繼承的方式去實現,並且實現了html頁面功能的拆分
不好的地方:通過繼承,表示渲染模板時候,會先去加載繼承的頁面,再加載子頁面,這樣模板頁面也會在網絡傳輸,這樣會占一些無用的帶寬
使用iframe后:頁面通過模板渲染,也僅是某個功能頁面,返回的時候,會少返回模板繼承的部分
(2) 菜單點擊效果(主頁面可能有多個菜單),要在后端提前去渲染好用戶點的哪個菜單,才能返回給用戶新的頁面
不好的地方:增加了后端編碼的復雜度,需要通過if判斷把點擊效果也加在標簽上面,這樣后端又會吃一些cpu的資源
使用iframe后:由於前端只是發送src請求(僅改變子頁面內容),主頁面不會改變,所以菜單只需寫好前端事件即可,這樣就會少后端很多模板渲染的麻煩事,可以少渲染一些內容,效率也會提升一點。
模板渲染比iframe這種方式好的地方:
(1) iframe是一個url顯示的所有功能頁面,模板渲染可以通過不同的url,來得到不同前端信息界面,而iframe這種方式能看見的url只有首頁的url,所以用iframe的話,一般只會一個url去操作,如果要獲取某個功能頁面,首次打開也只能通過鼠標點擊,才能請求到那個功能頁面,但是效率來說肯定是iframe方式會高一點
iframe標簽的使用:
注:
(1) 下面都是使用的jquery的寫法定位的標簽,和原生js查找不同
(2) 它倆之間的轉換
jquery >>> dom === $('iframe')[0] : 關鍵是這個[0]
dom >>> jquery === $(dom定位到的標簽)
格式:<iframe src='' frameborder='0'></iframe>
屬性:
src # 獲取html頁面的url網址
frameborder # 表示是否顯示框架的邊框,1顯示,0不顯示
1. iframe通過點擊事件獲取頁面的寫法
下面是點擊搜索按鈕的事件
# 這個是在iframe標簽中場景,window.parent切換到父窗口
# 如果是在iframe外直接$('iframe').attr('src', new_url)即可
2. iframe的刷新頁面及回退寫法
# 先要找到iframe標簽,在執行bom操作即可
(1) 在iframe標簽中實現刷新
$(window.parent.document).find('iframe')[0].contentWindow.location.reload(true);
(2) 在iframe標簽中實現回退
$(window.parent.document).find('iframe')[0].contentWindow.history.back();
(3) 主窗口的寫法
$('iframe')[0].contentWindow.location.reload(true); $('iframe')[0].contentWindow.history.back();
3.獲取iframe的當前url
注:如果在iframe中切換了子頁面的url,通過src只會取到第一次的給的src屬性
$(window.parent.document).find('iframe')[0].contentWindow.location.href;
4.主頁面和iframe子頁面互相調用函數
使用場景:
(1) 模態框的彈出,不能說你模態通過子頁面的點擊,僅在子頁面有模態框的效果
(2) 各種消息彈框的顯示,不能說在子頁面顯示,會錯位
4.1.在iframe中調用主頁面的內容
window.parent.要調用的函數();
例子寫法:
# 父頁面中
# iframe中
# iframe中調用上級窗口的函數寫法
4.2.調用iframe的函數寫法
$('iframe')[0].contentWindow.要調用的函數();