利用location.hash實(shí)現(xiàn)跨域iframe自適應(yīng)
頁(yè)面域關(guān)系:
主頁(yè)面a.html所屬域A:www.dhdzp.com
被iframe的頁(yè)面b.html所屬域B:www.baidu.com,假設(shè)地址:http://www.baidu.com/b.html
實(shí)現(xiàn)效果:
A域名下的頁(yè)面a.html中通過(guò)iframe嵌入B域名下的頁(yè)面b.html,由于b.html的寬度和高度是不可預(yù)知而且會(huì)變化的,所以需要a.html中的iframe自適應(yīng)大小.
問(wèn)題本質(zhì):
js對(duì)跨域iframe訪問(wèn)問(wèn)題,因?yàn)橐刂芶.html中iframe的高度和寬度就必須首先讀取得到b.html的大小,A、B不屬于同一個(gè)域,瀏覽器為了安全性考慮,使js跨域訪問(wèn)受限,讀取不到b.html的高度和寬度.
解決方案:
引入代理代理頁(yè)面c.html與a.html所屬相同域A,c.html是A域下提供好的中間代理頁(yè)面,假設(shè)c.html的地址:www.dhdzp.com/c.html,它負(fù)責(zé)讀取location.hash里面的width和height的值,然后設(shè)置與它同域下的a.html中的iframe的寬度和高度.
代碼如下:
a.html代碼
首先a.html中通過(guò)iframe引入了b.html
<iframe id=”b_iframe” height=”0″ width=”0″ src=”http://www.baidu.com/b.html” frameborder=”no” border=”0px” marginwidth=”0″ marginheight=”0″ scrolling=”no” allowtransparency=”yes” ></iframe>
b.html代碼
<script type=”text/javascript”>
var b_width = Math.max(document.documentElement.clientWidth,document.body.clientWidth);
var b_height = Math.max(document.documentElement.clientHeight,document.body.clientHeight);
var c_iframe = document.getElementById(”c_iframe”);
c_iframe.src = c_iframe.src+”#”+b_width+”|”+b_height; //http://www.dhdzp.com/c.html#width|height”
}
</script>
<!–js讀取b.html的寬和高,把讀取到的寬和高設(shè)置到和a.html在同一個(gè)域的中間代理頁(yè)面車(chē)c.html的src的hash里面–>
<iframe id=”c_iframe” height=”0″ width=”0″ src=”http://www.dhdzp.com/c.html” style=”display:none” ></iframe>
c.html代碼
<script type=”text/javascript”>
var b_iframe = parent.parent.document.getElementById(”b_iframe”);
var hash_url = window.location.hash;
var hash_width = hash_url.split(”#”)[1].split(”|”)[0]+”px”;
var hash_height = hash_url.split(”#”)[1].split(”|”)[1]+”px”;
b_iframe.style.width = hash_width;
b_iframe.style.height = hash_height;
</script>
a.html中的iframe就可以自適應(yīng)為b.html的寬和高了.
其他一些類(lèi)似js跨域操作問(wèn)題也可以按這個(gè)思路去解決
如果不是跨域訪問(wèn),可以參考這篇文章。iframe自適應(yīng)高度的多種方法方法小結(jié)
- javascript-hashchange事件和歷史狀態(tài)管理實(shí)例分析
- 關(guān)于hashchangebroker和statehashable的補(bǔ)充文檔
- 小發(fā)現(xiàn)之淺談location.search與location.hash的問(wèn)題
- location.hash保存頁(yè)面狀態(tài)的技巧
- window.location.hash知識(shí)匯總
- window.location.hash 使用說(shuō)明
- window.location.hash 屬性使用說(shuō)明
- hash特點(diǎn)、hashchange事件介紹及其常見(jiàn)應(yīng)用場(chǎng)景
相關(guān)文章
關(guān)于使用 jBox 對(duì)話框的提交不能彈出問(wèn)題解決方法
在 ASP.NET Form 中使用 jBox 的時(shí)候,在按鈕注冊(cè)的客戶端點(diǎn)擊事件中,會(huì)發(fā)現(xiàn)不能彈出對(duì)話框問(wèn)題2012-11-11
layui將table轉(zhuǎn)化表單顯示的方法(即table.render轉(zhuǎn)為表單展示)
今天小編就為大家分享一篇layui將table轉(zhuǎn)化表單顯示的方法(即table.render轉(zhuǎn)為表單展示),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09
JavaScript中的for循環(huán)與雙重for循環(huán)詳解
這篇文章主要給大家介紹了關(guān)于JavaScript中for循環(huán)與雙重for循環(huán)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
跟我學(xué)Nodejs(三)--- Node.js模塊
這是本系列的第三篇文章了,前面2篇網(wǎng)友們反饋回來(lái)不少的消息,加上最近2天比較忙,一直沒(méi)來(lái)得及整理,周末了,趕緊給大家整理下發(fā)出來(lái),本文講的是node.js模塊2014-05-05
js中toString()和String()區(qū)別詳解
本文主要介紹了js中toSring()和Sring()的區(qū)別。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-03-03
JavaScript編程設(shè)計(jì)模式之觀察者模式(Observer Pattern)實(shí)例詳解
這篇文章主要介紹了JavaScript編程設(shè)計(jì)模式之觀察者模式(Observer Pattern),簡(jiǎn)單說(shuō)明了觀察者模式的概念、原理并結(jié)合實(shí)例形式詳細(xì)給出了觀察者模式的相關(guān)實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2017-10-10
再談IE中Flash控件的自動(dòng)激活 ObjectWrap
再談IE中Flash控件的自動(dòng)激活 ObjectWrap...2007-03-03
微信小程序一周時(shí)間表功能實(shí)現(xiàn)
這篇文章主要介紹了微信小程序一周時(shí)間表功能實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10

