iframe窗口高度自適應(yīng)的實(shí)現(xiàn)方法
domainA 中有一個頁面index.html,通過iframe嵌套了domainB中的一個頁面other.html
由于other.html頁面在iframe中顯示,而且其頁面內(nèi)容會動態(tài)的增加或減少,現(xiàn)在需要去掉iframe的滾動條
由于javascript同源策略的限制,無法進(jìn)行跨域操作,使得問題比較棘手
參考了一下網(wǎng)上的做法,引入了一個代理頁面,或者叫做中介 agent.html,屬于domainA
然后,在domainB 中的other.html中,再使用iframe將agent.html進(jìn)行嵌套
好了,現(xiàn)在情況是這樣的:
index.html 使用iframe 嵌套 other.html
other.html 使用iframe 嵌套 agent.html
之所以要引入第3個頁面agent.html,就是為了遵守“同源策略”的規(guī)則,完成不同domain下參數(shù)的傳遞!
我們最終的目的是要去掉滾動條,又要保證被嵌入的頁面內(nèi)容全部得到顯示
1.取得other.html頁面的實(shí)際高度height
2.將height設(shè)置到其嵌入的iframe的src屬性上
3.在agent.html中截取出所屬iframe的src屬性中的height值
下面的例子中,使用了一個技巧,避免了使用setInterval()不斷去設(shè)置iframe的高度
做法是在iframe的src上,附加一個時間戳,讓瀏覽器每次都重新加載agent.html
進(jìn)而讓agent.hml中的js函數(shù)invokeMethodInTopWindow()得到執(zhí)行
domainA 中的2個html
index.html
#{extends 'main.html' /}
#{set title:'Home' /}
<hr>
<div style="color:red;font-weight:bold">窗口自適應(yīng)---繞開同源策略的限制,同時又利用同源策略,去掉iframe的滾動條,動態(tài)調(diào)整窗口的高度,讓其能夠顯示被嵌套頁面的所有內(nèi)容</div>
<!-- 需要動態(tài)調(diào)整高度的iframe -->
<div style="text-align:center;">
<iframe name="domainB" src="http://127.0.0.1:8088/other" width="80%" scrolling="no" frameborder="0"></iframe>
</div>
<script type="text/javascript">
function resize(height) {
//alert("resize");
document.getElementsByName("domainB")[0].height=height;
}
</script>
agent.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
我是代理頁面哦!
<script type="text/javascript">
window.onload = invokeMethodInTopWindow;
function invokeMethodInTopWindow() {
//alert("調(diào)用同域下的函數(shù),重置iframe的高度");
var domainA = document.parentWindow;
var realHeight = domainA.location.hash.split("#")[1];
//last step:調(diào)用最上層窗口的函數(shù),重置iframe的高度
parent.parent.resize(realHeight);
//alert("realHeight:"+realHeight);
//alert(document.parentWindow.name);//獲取容器所在窗口的名稱 domainA
//error://alert(document.parentWindow.parent.name); //訪問失敗 :不能訪問domainB
//alert(document.parentWindow.parent.parent.name);//最頂層window屬于domainA,因此可以訪問
}
//使用不同的時間戳設(shè)置iframe的src屬性后,就不用使用setInterval()
//setInterval("invokeMethodInTopWindow()",100);
</script>
</body>
</html>
domainB中的other.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body onclick="proxy()">
<!-- 被A域所嵌入的頁面 -->
<button type="button" onclick="btnClick()">切換顯示</button>
<div style="display:none">
在JavaScript中,有一個很重要的安全性限制,被稱為“Same-Origin Policy”(同源策略)。
這一策略對于JavaScript代碼能夠訪問的頁面內(nèi)容做了很重要的限制,即JavaScript只能訪問與包含它的文檔在同一域下的內(nèi)容。
所謂同源是指,域名,協(xié)議,端口相同。
在JavaScript中,有一個很重要的安全性限制,被稱為“Same-Origin Policy”(同源策略)。
這一策略對于JavaScript代碼能夠訪問的頁面內(nèi)容做了很重要的限制,即JavaScript只能訪問與包含它的文檔在同一域下的內(nèi)容。
所謂同源是指,域名,協(xié)議,端口相同。
在JavaScript中,有一個很重要的安全性限制,被稱為“Same-Origin Policy”(同源策略)。
這一策略對于JavaScript代碼能夠訪問的頁面內(nèi)容做了很重要的限制,即JavaScript只能訪問與包含它的文檔在同一域下的內(nèi)容。
所謂同源是指,域名,協(xié)議,端口相同。
在JavaScript中,有一個很重要的安全性限制,被稱為“Same-Origin Policy”(同源策略)。
這一策略對于JavaScript代碼能夠訪問的頁面內(nèi)容做了很重要的限制,即JavaScript只能訪問與包含它的文檔在同一域下的內(nèi)容。
所謂同源是指,域名,協(xié)議,端口相同。
在JavaScript中,有一個很重要的安全性限制,被稱為“Same-Origin Policy”(同源策略)。
這一策略對于JavaScript代碼能夠訪問的頁面內(nèi)容做了很重要的限制,即JavaScript只能訪問與包含它的文檔在同一域下的內(nèi)容。
所謂同源是指,域名,協(xié)議,端口相同。
在JavaScript中,有一個很重要的安全性限制,被稱為“Same-Origin Policy”(同源策略)。
這一策略對于JavaScript代碼能夠訪問的頁面內(nèi)容做了很重要的限制,即JavaScript只能訪問與包含它的文檔在同一域下的內(nèi)容。
所謂同源是指,域名,協(xié)議,端口相同。
在JavaScript中,有一個很重要的安全性限制,被稱為“Same-Origin Policy”(同源策略)。
這一策略對于JavaScript代碼能夠訪問的頁面內(nèi)容做了很重要的限制,即JavaScript只能訪問與包含它的文檔在同一域下的內(nèi)容。
所謂同源是指,域名,協(xié)議,端口相同。
在JavaScript中,有一個很重要的安全性限制,被稱為“Same-Origin Policy”(同源策略)。
這一策略對于JavaScript代碼能夠訪問的頁面內(nèi)容做了很重要的限制,即JavaScript只能訪問與包含它的文檔在同一域下的內(nèi)容。
所謂同源是指,域名,協(xié)議,端口相同。
在JavaScript中,有一個很重要的安全性限制,被稱為“Same-Origin Policy”(同源策略)。
這一策略對于JavaScript代碼能夠訪問的頁面內(nèi)容做了很重要的限制,即JavaScript只能訪問與包含它的文檔在同一域下的內(nèi)容。
所謂同源是指,域名,協(xié)議,端口相同。
</div>
<div style="display:block">
比如一個黑客程序,他利用IFrame把真正的銀行登錄頁面嵌到他的頁面上,當(dāng)你使用真實(shí)的用戶名,密碼登錄時,
他的頁面就可以通過Javascript讀取到你的表單中input中的內(nèi)容,這樣用戶名,密碼就輕松到手了。
比如一個黑客程序,他利用IFrame把真正的銀行登錄頁面嵌到他的頁面上,當(dāng)你使用真實(shí)的用戶名,密碼登錄時,
他的頁面就可以通過Javascript讀取到你的表單中input中的內(nèi)容,這樣用戶名,密碼就輕松到手了。
比如一個黑客程序,他利用IFrame把真正的銀行登錄頁面嵌到他的頁面上,當(dāng)你使用真實(shí)的用戶名,密碼登錄時,
他的頁面就可以通過Javascript讀取到你的表單中input中的內(nèi)容,這樣用戶名,密碼就輕松到手了。
比如一個黑客程序,他利用IFrame把真正的銀行登錄頁面嵌到他的頁面上,當(dāng)你使用真實(shí)的用戶名,密碼登錄時,
他的頁面就可以通過Javascript讀取到你的表單中input中的內(nèi)容,這樣用戶名,密碼就輕松到手了。
比如一個黑客程序,他利用IFrame把真正的銀行登錄頁面嵌到他的頁面上,當(dāng)你使用真實(shí)的用戶名,密碼登錄時,
他的頁面就可以通過Javascript讀取到你的表單中input中的內(nèi)容,這樣用戶名,密碼就輕松到手了。
比如一個黑客程序,他利用IFrame把真正的銀行登錄頁面嵌到他的頁面上,當(dāng)你使用真實(shí)的用戶名,密碼登錄時,
他的頁面就可以通過Javascript讀取到你的表單中input中的內(nèi)容,這樣用戶名,密碼就輕松到手了。
比如一個黑客程序,他利用IFrame把真正的銀行登錄頁面嵌到他的頁面上,當(dāng)你使用真實(shí)的用戶名,密碼登錄時,
他的頁面就可以通過Javascript讀取到你的表單中input中的內(nèi)容,這樣用戶名,密碼就輕松到手了。
比如一個黑客程序,他利用IFrame把真正的銀行登錄頁面嵌到他的頁面上,當(dāng)你使用真實(shí)的用戶名,密碼登錄時,
他的頁面就可以通過Javascript讀取到你的表單中input中的內(nèi)容,這樣用戶名,密碼就輕松到手了。
</div>
<!-- 反向嵌入A域的頁面 -->
<iframe name="domainA" src="" style="display:none"></iframe>
<!-- script -->
<script type="text/javascript">
//隱藏或顯示div
function btnClick() {
var div = document.getElementsByTagName("div");
for(var i in div) {
if(i<div.length)
div[i].style.display = (div[i].style.display == 'none') ? "block" : "none";
}
}
</script>
<script type="text/javascript">
function proxy(){
//alert("btn click");
//獲取本頁面的高度
var scrollHeight = document.documentElement.scrollHeight;
//alert("滾動條高度:"+scrollHeight);
//將窗口的高度先設(shè)置到屬于domainA的iframe的src屬性上
var iframeDomainA = document.getElementsByName("domainA")[0];
//用domainA的一個頁面作為代理,最終的目的是解決“同源策略”的限制
var url = "http://localhost:9000/agent";
/**技巧:通過時間戳讓瀏覽器每次重新加載iframe,這樣每次都會自動設(shè)置被嵌套的iframe的高度,避免了使用setInterval()*/
iframeDomainA.src = url+ "? time=" + new Date().getTime() + "#" + scrollHeight ;
}
window.onload = proxy;
</script>
</body>
</html>
- JS實(shí)現(xiàn)iframe自適應(yīng)高度的方法示例
- jQuery簡單實(shí)現(xiàn)iframe的高度根據(jù)頁面內(nèi)容自適應(yīng)的方法
- JS實(shí)現(xiàn)iframe自適應(yīng)高度的方法(兼容IE與FireFox)
- js實(shí)現(xiàn)iframe自動自適應(yīng)高度的方法
- 使用jQuery不判斷瀏覽器高度解決iframe自適應(yīng)高度問題
- jsp頁面iframe高度自適應(yīng)的js代碼
- javascript原生和jquery庫實(shí)現(xiàn)iframe自適應(yīng)高度和寬度
- javascript 中iframe高度自適應(yīng)(同域)實(shí)例詳解
相關(guān)文章
微信小程序使用form表單獲取輸入框數(shù)據(jù)的實(shí)例代碼
這篇文章主要介紹了微信小程序使用form表單獲取輸入框數(shù)據(jù)的實(shí)例代碼,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05JavaScript數(shù)據(jù)類型學(xué)習(xí)筆記分享
這篇文章主要為大家分享了JavaScript數(shù)據(jù)類型學(xué)習(xí)筆記,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09JS實(shí)現(xiàn)讀取xml內(nèi)容并輸出到div中的方法示例
這篇文章主要介紹了JS實(shí)現(xiàn)讀取xml內(nèi)容并輸出到div中的方法,涉及javascript針對xml格式數(shù)據(jù)的讀取、遍歷、輸出等相關(guān)操作技巧,需要的朋友可以參考下2018-04-04JavaScript 聯(lián)動的無限級封裝類,數(shù)據(jù)采用非Ajax方式,隨意添加聯(lián)動
JavaScript 聯(lián)動的無限級封裝類,數(shù)據(jù)采用非Ajax方式,隨意添加聯(lián)動2010-06-06Layui table field初始化加載時進(jìn)行隱藏的方法
今天小編就為大家分享一篇Layui table field初始化加載時進(jìn)行隱藏的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09JavaScript中Array的實(shí)用操作技巧分享
最近在調(diào)試JSP頁面時頻繁與ajax打交道,在復(fù)雜場景下,ajax傳參數(shù)就需要對大量參數(shù)進(jìn)行處理。這時我才發(fā)現(xiàn),熟練Array的處理真的會使開發(fā)輕松不少?。∠旅婢徒o大家分享下JavaScript中Array的實(shí)用操作技巧,有需要的可以參考借鑒。2016-09-09