国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript實(shí)現(xiàn)iframe自動(dòng)高度調(diào)整和不同主域名跨域

2019-11-20 10:29:40
字體:
供稿:網(wǎng)友

 大家都知道Js有同源策略,就是主域名不同嵌套的iframe不允許Js通信的。

比如我有一個(gè)網(wǎng)站,網(wǎng)站中要嵌入其網(wǎng)站的頁面。那么我可以使用iframe引用第三方網(wǎng)站的地址即可。

但是問題也來的iframe的高度是固定的不能與第三方網(wǎng)站很好的融合,又例如第三方網(wǎng)站使用了瀑布流插件,要滾動(dòng)加載自動(dòng)計(jì)算高度,那么先說跨域:iframe主域名不同跨域方法,假如網(wǎng)站 A.com  B.com   A 里面放入一個(gè)iframe 引用了B.com,這種情況下B.com里面的Js是無法訪問到A.com的。JS跨域必須是同源,就是同一個(gè)主域名,那腫么辦呢?

我們可以在B.com中在引入一個(gè)iframe,暫且叫C吧 這個(gè)iframe加載A.com中的一個(gè)網(wǎng)頁。這樣同源就有了B.com中的iframe中的網(wǎng)頁就可以和A.com通訊了。下面只要B和C通訊,讓C和A通訊就完成B->A通訊,這樣當(dāng)B高度變化時(shí)通知C,讓C通知A把iframe高度調(diào)整。
B和C通訊,其實(shí)通過url地址就可以實(shí)現(xiàn)通訊了,B.com iframe設(shè)置為隱藏,改變src地址時(shí)候C就可以接收。

廢話不說了上代碼

A.com/index.html

<html>  <script src="{$smarty.const.STATIC_URL}/js/jquery-1.7.1.min.js"></script>  <script>   var test = function() {     $('#h1').html('test');   }   </script><body><h1 id="h1">nba.alltosun.net</h1><iframe id="ifm" width="760" height="100" src="http://***.sinaapp.com/"></iframe></body></html>


B.com/index.html

<html><head></head><body>  <h1>**.appsina.com</h1>  <button id="button">設(shè)置高度</button>  <div id="div" style="height:200px;display:none;"></div>  <script src="http://nba.alltosun.net/js/jquery-1.7.1.min.js"></script>  <script>  $(function(){    window.ifrH = function(e){      var searchUrl = window.location.search;      var b = null;             var getParam = function(url, param) {        var q = url.match(new RegExp( param + "=[^&]*")),        n = "";        if (q && q.length) {          n = q[0].replace(param + "=", "");        }        return n;      }             var f = getParam(searchUrl,"url"),        h = getParam(searchUrl, "ifmID"),        k = getParam(searchUrl, "cbn"),        g = getParam(searchUrl, "mh");              var iframeId = 'testiframe';      var iframe = document.getElementById(iframeId);      var divId = 'alltosun';             if (!iframe){        var iframe = document.createElement('iframe');        iframe.id = iframeId;        iframe.style.display = "none";        iframe.width = 0;        iframe.height = 0;        document.body.appendChild(iframe);      }             if (e && e.type == "onload" && h) {        b.parentNode.removeChild(b);        b = null;      }             if (!b) {        b = document.createElement("div");        b.id = divId;        b.style.cssText = "clear:both;"        document.body.appendChild(b);      }             var l = b.offsetTop + b.offsetHeight;      iframe.src = (decodeURIComponent(f) ||           "http://*****/test2") + "&h=" + l + "&ifmID=" + (h || "ifm") + "&cbn=test" + "&mh=" + g + "&t=" + ( (+ new Date()));             if (e && e.type =="onload") {        window.onload = null;      }    }         window.onload = function() {      ifrH({type: "onload"});    }         // ifrH();    $('button').click(function(){      $('div').show();      ifrH();    })  })  </script></body></html>


C 代理文件

<script>var search = window.location.search,getSearchParam = function (search, key) {  var mc = search.match (new RegExp ( key + "=([^/&]*)") ),    ret="";  mc && mc.length && (ret = mc[0].replace( key + "=",""));  return ret;},// 參數(shù)h h = getSearchParam(search,"h"),ifmID = getSearchParam(search,"ifmID"),cbn = getSearchParam(search,"cbn"),// 寬高mh = getSearchParam(search,"mh") || h,isFunction = function(fn){  return !!fn && !fn.nodeName && fn.constructor != String       && fn.constructor != RegExp && fn.constructor != Array       && (/function/i).test(fn + "");}; try{  if(parent && parent.parent){    ifm = parent.parent.document.getElementById(ifmID);    ifm && mh && (ifm.height=mh);    fn=parent.parent[cbn];    isFunction(fn) && fn.call();    ifm=null;  }}catch(ex){  console.log(ex);} </script>

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 出国| 微山县| 兴义市| 平利县| 乐平市| 日土县| 文化| 日喀则市| 柳州市| 西林县| 桃江县| 读书| 社旗县| 澄城县| 大同市| 上高县| 深水埗区| 安溪县| 浦北县| 阆中市| 台湾省| 资源县| 莱州市| 法库县| 衡山县| 曲阳县| 松原市| 普陀区| 宝应县| 宕昌县| 通州区| 鄂州市| 青岛市| 怀集县| 阜宁县| 玉树县| 竹北市| 宣汉县| 三明市| 普格县| 正安县|