iframe窗口高度自適應(yīng)的實(shí)現(xiàn)方法
domainA 中有一個(gè)頁(yè)面index.html,通過iframe嵌套了domainB中的一個(gè)頁(yè)面other.html
由于other.html頁(yè)面在iframe中顯示,而且其頁(yè)面內(nèi)容會(huì)動(dòng)態(tài)的增加或減少,現(xiàn)在需要去掉iframe的滾動(dòng)條
由于javascript同源策略的限制,無法進(jìn)行跨域操作,使得問題比較棘手
參考了一下網(wǎng)上的做法,引入了一個(gè)代理頁(yè)面,或者叫做中介 agent.html,屬于domainA
然后,在domainB 中的other.html中,再使用iframe將agent.html進(jìn)行嵌套
好了,現(xiàn)在情況是這樣的:
index.html 使用iframe 嵌套 other.html
other.html 使用iframe 嵌套 agent.html
之所以要引入第3個(gè)頁(yè)面agent.html,就是為了遵守“同源策略”的規(guī)則,完成不同domain下參數(shù)的傳遞!
我們最終的目的是要去掉滾動(dòng)條,又要保證被嵌入的頁(yè)面內(nèi)容全部得到顯示
1.取得other.html頁(yè)面的實(shí)際高度height
2.將height設(shè)置到其嵌入的iframe的src屬性上
3.在agent.html中截取出所屬iframe的src屬性中的height值
下面的例子中,使用了一個(gè)技巧,避免了使用setInterval()不斷去設(shè)置iframe的高度
做法是在iframe的src上,附加一個(gè)時(shí)間戳,讓瀏覽器每次都重新加載agent.html
進(jìn)而讓agent.hml中的js函數(shù)invokeMethodInTopWindow()得到執(zhí)行
domainA 中的2個(gè)html
index.html
#{extends 'main.html' /}
#{set title:'Home' /}
<hr>
<div style="color:red;font-weight:bold">窗口自適應(yīng)---繞開同源策略的限制,同時(shí)又利用同源策略,去掉iframe的滾動(dòng)條,動(dòng)態(tài)調(diào)整窗口的高度,讓其能夠顯示被嵌套頁(yè)面的所有內(nèi)容</div>
<!-- 需要?jiǎng)討B(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>
我是代理頁(yè)面哦!
<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í)間戳設(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域所嵌入的頁(yè)面 -->
<button type="button" onclick="btnClick()">切換顯示</button>
<div style="display:none">
在JavaScript中,有一個(gè)很重要的安全性限制,被稱為“Same-Origin Policy”(同源策略)。
這一策略對(duì)于JavaScript代碼能夠訪問的頁(yè)面內(nèi)容做了很重要的限制,即JavaScript只能訪問與包含它的文檔在同一域下的內(nèi)容。
所謂同源是指,域名,協(xié)議,端口相同。
在JavaScript中,有一個(gè)很重要的安全性限制,被稱為“Same-Origin Policy”(同源策略)。
這一策略對(duì)于JavaScript代碼能夠訪問的頁(yè)面內(nèi)容做了很重要的限制,即JavaScript只能訪問與包含它的文檔在同一域下的內(nèi)容。
所謂同源是指,域名,協(xié)議,端口相同。
在JavaScript中,有一個(gè)很重要的安全性限制,被稱為“Same-Origin Policy”(同源策略)。
這一策略對(duì)于JavaScript代碼能夠訪問的頁(yè)面內(nèi)容做了很重要的限制,即JavaScript只能訪問與包含它的文檔在同一域下的內(nèi)容。
所謂同源是指,域名,協(xié)議,端口相同。
在JavaScript中,有一個(gè)很重要的安全性限制,被稱為“Same-Origin Policy”(同源策略)。
這一策略對(duì)于JavaScript代碼能夠訪問的頁(yè)面內(nèi)容做了很重要的限制,即JavaScript只能訪問與包含它的文檔在同一域下的內(nèi)容。
所謂同源是指,域名,協(xié)議,端口相同。
在JavaScript中,有一個(gè)很重要的安全性限制,被稱為“Same-Origin Policy”(同源策略)。
這一策略對(duì)于JavaScript代碼能夠訪問的頁(yè)面內(nèi)容做了很重要的限制,即JavaScript只能訪問與包含它的文檔在同一域下的內(nèi)容。
所謂同源是指,域名,協(xié)議,端口相同。
在JavaScript中,有一個(gè)很重要的安全性限制,被稱為“Same-Origin Policy”(同源策略)。
這一策略對(duì)于JavaScript代碼能夠訪問的頁(yè)面內(nèi)容做了很重要的限制,即JavaScript只能訪問與包含它的文檔在同一域下的內(nèi)容。
所謂同源是指,域名,協(xié)議,端口相同。
在JavaScript中,有一個(gè)很重要的安全性限制,被稱為“Same-Origin Policy”(同源策略)。
這一策略對(duì)于JavaScript代碼能夠訪問的頁(yè)面內(nèi)容做了很重要的限制,即JavaScript只能訪問與包含它的文檔在同一域下的內(nèi)容。
所謂同源是指,域名,協(xié)議,端口相同。
在JavaScript中,有一個(gè)很重要的安全性限制,被稱為“Same-Origin Policy”(同源策略)。
這一策略對(duì)于JavaScript代碼能夠訪問的頁(yè)面內(nèi)容做了很重要的限制,即JavaScript只能訪問與包含它的文檔在同一域下的內(nèi)容。
所謂同源是指,域名,協(xié)議,端口相同。
在JavaScript中,有一個(gè)很重要的安全性限制,被稱為“Same-Origin Policy”(同源策略)。
這一策略對(duì)于JavaScript代碼能夠訪問的頁(yè)面內(nèi)容做了很重要的限制,即JavaScript只能訪問與包含它的文檔在同一域下的內(nèi)容。
所謂同源是指,域名,協(xié)議,端口相同。
</div>
<div style="display:block">
比如一個(gè)黑客程序,他利用IFrame把真正的銀行登錄頁(yè)面嵌到他的頁(yè)面上,當(dāng)你使用真實(shí)的用戶名,密碼登錄時(shí),
他的頁(yè)面就可以通過Javascript讀取到你的表單中input中的內(nèi)容,這樣用戶名,密碼就輕松到手了。
比如一個(gè)黑客程序,他利用IFrame把真正的銀行登錄頁(yè)面嵌到他的頁(yè)面上,當(dāng)你使用真實(shí)的用戶名,密碼登錄時(shí),
他的頁(yè)面就可以通過Javascript讀取到你的表單中input中的內(nèi)容,這樣用戶名,密碼就輕松到手了。
比如一個(gè)黑客程序,他利用IFrame把真正的銀行登錄頁(yè)面嵌到他的頁(yè)面上,當(dāng)你使用真實(shí)的用戶名,密碼登錄時(shí),
他的頁(yè)面就可以通過Javascript讀取到你的表單中input中的內(nèi)容,這樣用戶名,密碼就輕松到手了。
比如一個(gè)黑客程序,他利用IFrame把真正的銀行登錄頁(yè)面嵌到他的頁(yè)面上,當(dāng)你使用真實(shí)的用戶名,密碼登錄時(shí),
他的頁(yè)面就可以通過Javascript讀取到你的表單中input中的內(nèi)容,這樣用戶名,密碼就輕松到手了。
比如一個(gè)黑客程序,他利用IFrame把真正的銀行登錄頁(yè)面嵌到他的頁(yè)面上,當(dāng)你使用真實(shí)的用戶名,密碼登錄時(shí),
他的頁(yè)面就可以通過Javascript讀取到你的表單中input中的內(nèi)容,這樣用戶名,密碼就輕松到手了。
比如一個(gè)黑客程序,他利用IFrame把真正的銀行登錄頁(yè)面嵌到他的頁(yè)面上,當(dāng)你使用真實(shí)的用戶名,密碼登錄時(shí),
他的頁(yè)面就可以通過Javascript讀取到你的表單中input中的內(nèi)容,這樣用戶名,密碼就輕松到手了。
比如一個(gè)黑客程序,他利用IFrame把真正的銀行登錄頁(yè)面嵌到他的頁(yè)面上,當(dāng)你使用真實(shí)的用戶名,密碼登錄時(shí),
他的頁(yè)面就可以通過Javascript讀取到你的表單中input中的內(nèi)容,這樣用戶名,密碼就輕松到手了。
比如一個(gè)黑客程序,他利用IFrame把真正的銀行登錄頁(yè)面嵌到他的頁(yè)面上,當(dāng)你使用真實(shí)的用戶名,密碼登錄時(shí),
他的頁(yè)面就可以通過Javascript讀取到你的表單中input中的內(nèi)容,這樣用戶名,密碼就輕松到手了。
</div>
<!-- 反向嵌入A域的頁(yè)面 -->
<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");
//獲取本頁(yè)面的高度
var scrollHeight = document.documentElement.scrollHeight;
//alert("滾動(dòng)條高度:"+scrollHeight);
//將窗口的高度先設(shè)置到屬于domainA的iframe的src屬性上
var iframeDomainA = document.getElementsByName("domainA")[0];
//用domainA的一個(gè)頁(yè)面作為代理,最終的目的是解決“同源策略”的限制
var url = "http://localhost:9000/agent";
/**技巧:通過時(shí)間戳讓瀏覽器每次重新加載iframe,這樣每次都會(huì)自動(dòng)設(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簡(jiǎn)單實(shí)現(xiàn)iframe的高度根據(jù)頁(yè)面內(nèi)容自適應(yīng)的方法
- JS實(shí)現(xiàn)iframe自適應(yīng)高度的方法(兼容IE與FireFox)
- js實(shí)現(xiàn)iframe自動(dòng)自適應(yīng)高度的方法
- 使用jQuery不判斷瀏覽器高度解決iframe自適應(yīng)高度問題
- jsp頁(yè)面iframe高度自適應(yīng)的js代碼
- javascript原生和jquery庫(kù)實(shí)現(xiàn)iframe自適應(yīng)高度和寬度
- javascript 中iframe高度自適應(yīng)(同域)實(shí)例詳解
相關(guān)文章
微信小程序 云開發(fā)模糊查詢實(shí)現(xiàn)解析
這篇文章主要介紹了微信小程序 云開發(fā)模糊查詢實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
js?實(shí)現(xiàn)picker?選擇器示例詳解
這篇文章主要為大家介紹了js?實(shí)現(xiàn)picker?選擇器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
IE6-IE9不支持table.innerHTML的解決方法分享
讓ie6-ie9支持table.innerHTML,其實(shí)這里只是對(duì)table做了處理,對(duì)其他不支持的元素可以用類似的方案2012-09-09
簡(jiǎn)單實(shí)現(xiàn)bootstrap選項(xiàng)卡效果
這篇文章主要為大家詳細(xì)介紹了如何簡(jiǎn)單實(shí)現(xiàn)bootstrap選項(xiàng)卡效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
微信小程序 扭蛋抽獎(jiǎng)機(jī)css3動(dòng)畫實(shí)現(xiàn)詳解
這篇文章主要介紹了微信小程序 扭蛋抽獎(jiǎng)機(jī)css3動(dòng)畫實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07

