iframe高度自适应_读取跨域iframe

iframe高度自适应_读取跨域iframe采用JavaScript来控制iframe元素的高度是iframe高度自适应的关键,同时由于JavaScript对不同域名下权限的控制,引发出同域、跨域两种情况。由于客户端js使用浏览器的同源安全策略,跨域情况下,被嵌套页面如果想要获取和修改父页面的DOM属性会出现权限不足的情况,提示错误:Permissiondeniedtoaccessproperty’document’。这是

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

采用JavaScript来控制iframe元素的高度是iframe高度自适应的关键,同时由于JavaScript对不同域名下权限的控制,引发出同域、跨域两种情况。

由于客户端js使用浏览器的同源安全策略,跨域情况下,被嵌套页面如果想要获取和修改父页面的DOM属性会出现权限不足的情况,提示错误:Permission denied to access property ‘document’。这是因为除了包含脚本的文档载入的主机外,同源策略禁止客户端脚本链接到其他任何主机或者访问其他任何主机的数据。这意味着访问一个web服务的javascript代码通常只有在它也驻留在Web服务本身所在的同一个服务器的时候才有用。

所以在跨域情况下,我们遇到的问题就是:父窗口无法获得被嵌套页面的高度,而且被嵌套页面也无法通过驻留在其服务器上的js修改父窗口Dom节点的属性。所以我们需要一个媒介,来获得被嵌套页面的高度同时又能修改主界面iframe节点的高度。

思路:现有主界面main在域a下,被嵌套页面B在域b下,被嵌套页面B又嵌套一个在域a下的中介页面A。当用户打开浏览器访问mail.html的时候载入B,触发B的onload事件获取其自身高度,然后B载入A,并将高度值作为参数赋值给A的location对象。这样A就可以通过location.hash获得B的高度。(location是javascript里边管理地址栏的内置对象,比如location.href就管理页面的url,用location.href=url就可以直接将页面重定向url。而location.hash则可以用来获取或设置页面的标签值。比如http://domain/#admin的location.hash=”#admin”。利用这个属性值可以做一些非常有意义的事情。)。由于A和main页面同域,所以可以修改main的dom节点属性,从而达到我们设置iframe标签高度的目的。

       嵌入iframe,且iframe的src是跨域的页面的高度自适应

关键代码:

iframe主页面:main.html

<iframe id="iframeB"  name="iframeB" src="www.b.com/B.html" width="100%" height="auto" scrolling="no" frameborder="0"></iframe>

iframe嵌套页面:B.html

<iframe id="iframeA" name="iframeA" src="" width="0" height="0" style="display:none;" ></iframe> 
<script type="text/javascript">
function sethash(){
hashH = document.documentElement.scrollHeight; //获取自身高度
urlC = "www.a.com/A.html"; //设置iframeA的src
document.getElementByIdx_x_x_x("iframeA").src=urlC+"#"+hashH; //将高度作为参数传递
}
window.onload=sethash;
</script>

中介页面:A.html

<script>
function pseth() {
var iObj = parent.parent.document.getElementByIdx_x_x_x('iframeB');//A和main同域,所以可以访问节点
iObjH = parent.parent.frames["iframeB"].frames["iframeA"].location.hash;//访问自己的location对象获取hash值
iObj.style.height = iObjH.split("#")[1]+"px";//操作dom
}
pseth();
</script>

同域情况下就不用多说了,直接在被嵌套的页面B中获取其自身高度并操作其父窗口main的dom属性即可。

iframe高度自适应_读取跨域iframe

神策下的页面都是链接到其他域的页面,此时要做自适应高度就会涉及到跨域下的iframe自适应高度

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182957.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月12日 上午6:16
下一篇 2022年10月12日 上午6:16


相关推荐

  • sfm点云代码_SfM实现过程分析

    sfm点云代码_SfM实现过程分析昨天立了flag,今天要学SfM过程,大概看了看SfM的各个文件目录,build&make出来的linux-release-x86大概叫这个名字的文件夹里面有很多可执行文件,直接根据文档里给的参数跑就可以,要搞源码的话实在是搞不起,太复杂,太庞大了。下面的代码是从他给出的easytouse的python脚本中截取的核心代码,注释的也很赞,清晰明确。SfMglobalpipeline…

    2022年6月20日
    44
  • C语言中的strtok函数用法

    C语言中的strtok函数用法strtok 函数是 string h 库中的函数原型 char strtok chars constchardel strtok 用来将字符串分割成一个个片段 参数 s 指向欲分割的字符串 参数 delim 则为分割字符串中包含的所有字符 当 strtok 在参数 s 的字符串中发现参数 delim 中包涵的分割字符时 则会将该字符改为 0 字符 仅在第一次调用时 strtok 必需给予

    2026年3月19日
    3
  • Intellij IDEA快捷键大全(超详细)

    Intellij IDEA快捷键大全(超详细)IntellijIDEA快捷键大全(超详细)

    2022年5月15日
    66
  • django filter查询_django drf

    django filter查询_django drf前言当我们需要对后台的数据进行过滤的时候,drf有两种,搜索过滤和排序过滤。搜索过滤:比如我们想返回sex=1的,那么我们就可以从所有数据中进行筛选排序过滤:比如我们想对价格进行升序排列,就可以

    2022年8月7日
    8
  • 零基础也能行!用Cursor+Claude4.0快速开发小程序的完整指南

    零基础也能行!用Cursor+Claude4.0快速开发小程序的完整指南

    2026年3月16日
    5
  • rs485 串口通信 c代码_串口服务器MOXA CN2650代替TS16MEI

    rs485 串口通信 c代码_串口服务器MOXA CN2650代替TS16MEI本篇约 1330 字 22 图分享人 范旭祥 王焕蕾 杭州 文末有 串口通信 汇总 1 CN2650 与 TS16 对比 1 1DigiTS16MEI 单电源 多发内部整流电流模块故障 详见 TS16 双电源改造 主板或某端口故障 1 2MOXACN 2650 外观与面板说明 1 3CN 2650 与 TS16MEI 端口定义 2 MOXACN2650 冗余功能 2 1 双电源冗余一路供电故障时 使

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号