接着昨天的工作 如何根据iframe内嵌页面调整iframe高宽 来说,按照文章中说的第二种方法实现代码如下:

实现

A.com/detail/view 页面的iframe代码如下:

<iframe id="thirdiframe" src="http://B.com/location/testiframe" width="100%" scrolling="no" frameborder="0" height="900"></iframe>

B.com是第三方的域名,所以要求在B.com/location/testiframe的页面增加下面的html

<iframe id="aiframe" src="#" style="display:none"></iframe>
<script type="text/javascript">this.document.getElementById("aiframe").src="http://A.com/detail/iframe?height=" + window.innerHeight;</script>
A.com/deatil/iframe是A提供的动态接口,返回的数据是一段js:
<script type="text/javascript">parent.parent.document.getElementById("thirdiframe").style.height="20px";</script>

这段中的20px是根据参数来生成的

基本这样就可以了。但是在同事的提醒下,考虑到后面几个问题:

1 动态接口的安全问题

A.com/detail/iframe?height=20

会返回一段js,而这里返回的js是带传入参数的。所以这里很有可能会出现反射型XSS

所以在安全性上要注意一下,需要对height参数进行验证,比如使用php的intval这个函数来一劳永逸。

2 让B这个第三方嵌入一套html代码好吗?

这里不讨论B是否允许嵌入的商务问题。即使B允许嵌入了,但是以后万一想修改这个代码,还需要去让B来修改。

实际上让B嵌入一个A域名的js

<script type="text/javascript" src="http://A.com/detail/iframejs"></script>

这个js:http://A.com/detail/iframejs 是A提供的一个js,它受A(我方)控制,所以,这个逻辑就可以由A方进行控制了

这个js返回的内容如下:

function initA() {
var iframeA = document.createElement('iframe');
iframeA.src='http://A.com/detail/iframe?height=' + window.innerHeight;
iframeA.style.display='none';
iframeA.id='iframeA';
document.body.appendChild(iframeA);
} function updateAHeight(height) {
if (document.getElementById('iframeA') == null) {
init360();
}
var iframeA = document.getElementById('iframeA');
iframeA.src='http://A.com/detail/iframe?height=' + height;
} if (window.addEventListener) {
window.addEventListener('load', initA, false);
} else {
window.attachEvent('onload', initA);
}

对上面的一段代码,注意几点:

a 当页面加载完成之后再执行initA事件,需要使用addEventListener和attachEvent函数,不应该直接把document.onload来执行,因为B的页面本身可能会有绑定其他事件。

b addEventListener是firefox,chrome等使用的事件加绑定的函数,而attachEvent是IE使用的事件加绑定事件,所以需要分开来做。

c 这里为什么提供一个updateAHeight函数呢?因为有可能B的页面高度会进行变化,那么当B的页面高度变化的时候有没办法改变A的iframe的高度呢?

有两种方法:

c.1 B在改变页面高度的事件上调用一个函数,来修改B页面的iframe的src,其中,这里的updateAHeight就是这个用处的

c.2 做循环,循环体内就是将当前页面的高度设置值,传递给iframe,这个循环当然可以给http://A.com/detail/iframejs  这个js来做的。

总结

原本以为很简单的一个事情,整一整还可以整出这么多名堂,话说也好久没写js了。。。代码啥的,都是技术熟练活啊。。。

如何根据iframe内嵌页面调整iframe高宽续篇的更多相关文章

  1. 如何根据iframe内嵌页面调整iframe高宽

    问题来自于工作的实例,我的一个域名A的页面,有个iframe,它可能内嵌了另一个域名B的页面,也可能内嵌域名C的页面,但是呢,B和C的页面大小是不一样的,特别是高是不一样的高,那么我如何设置ifram ...

  2. Python3.x:selenium获取iframe内嵌页面的源码

    Python3.x:selenium获取iframe内嵌页面的源码 前言 在一些网页中经常会看到ifrmae/frame标签,iframe是嵌入式框架一般用来在已有的页面中嵌入另一个页面,当一个元素在 ...

  3. 弹出iframe内嵌页面元素到父页面并全屏化

    (注册博客好久了,一直没舍得添砖加瓦,主要是每次想写点东西的时候,随便搜一搜发现都比我总结的都要好,甚感尴尬,但是总是要开始的,所以这就是我的第一篇博客,也绝不会是最后一篇,废话不多说,直接入正题) ...

  4. iframe内嵌页面——跨域通讯

      <template> <div class="act-form"> <iframe :src="src" ref=" ...

  5. MetaBase使用iframe内嵌到Vue页面样式优化

    Matebase是一个开源,易上手的BI工具,这里不做太多介绍了. 官网地址:https://www.metabase.com/ 解决问题描述: 使用iframe内嵌Metabase公开链接之后,页面 ...

  6. [转]内嵌页面iframe以及和其兄弟iframe的相互传值

    原文出处 iframe的调用包括以下几个方面:(调用包含html dom,js全局变量,js方法) 主页面调用iframe: iframe页面调用主页面: 主页面的包含的iframe之间相互调用: 主 ...

  7. 关于selenium自动化对iframe内嵌元素的处理

    今天上班闲来无聊,于是来练练自动化,结果碰上了可恶的iframe,楼主,以前也遇到过,但是一直也没搞懂怎么处理的,都是抄别人的代码,今天决定独立解决试试.首先先来认识什么是iframe,它就长下图这样 ...

  8. HTML+CSS教程(二)frameset框架和iframe内嵌

    一.框架 (frameset)1.用<frameset></frameset>代替了<body></body>2.rows设置行的占页面的百分比:col ...

  9. WebBrowser内嵌页面的跨域调用问题

    很早之前我写过一篇Blog:网页通过External接口与WebBrowser交互,文中的交互其实只介绍了JS调用C++的部分,而C++调用JS由于微软自己的例子太多,那篇文章就没介绍,不过我最近遇到 ...

随机推荐

  1. mac电脑如何不生成.DS_STORE文件

    执行这个命令,然后重启 defaults write com.apple.desktopservices DSDontWriteNetworkStores true

  2. 致第一次安装RIME的你

    转载自百度RIME吧,作者:半月湾C 原帖地址:http://tieba.baidu.com/p/3288634121   序言 很喜欢小狼毫输入法,喜欢他的简洁,美观以及超强悍的个人定制功能.关于 ...

  3. 使用nginx-http-concat优化网站响应

    前言: 我们在访问淘宝的时候,会看到代码中的js和css文件是通过一次请求或得的,我们知道浏览器一次请求只能并发访问数个资源,这样的处理错输在网络传输层面可以大大节省时间,这里使用的技术就是把css. ...

  4. iOS网络编程模型

    iOS网络编程层次结构也分为三层: Cocoa层:NSURL,Bonjour,Game Kit,WebKit Core Foundation层:基于 C 的 CFNetwork 和 CFNetServ ...

  5. js实现hash

    由于项目中用到了hash,自己实现了一个. Hash = function () { } Hash.prototype = { constructor: Hash, add: function (k, ...

  6. golang全文搜索--使用sphinx

    不多废话,测试环境 `ubuntu 13.10` ## 安装 sudo apt-get install sphinxsearch ## 配置 nano /etc/sphinxsearch/sphinx ...

  7. CSS3学习笔记--transform中的Matrix(矩阵)

    transform: matrix(a,b,c,d,e,f) ,如下图矩阵所示,任意点(x,y,1)经过matrix变化为(ax+cy+e,bx+dy+f,1),由此可以知道,matrix参数与tra ...

  8. mvc 返回 xml

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...

  9. vue开发资料

    http://cn.vuejs.org/v2/guide/ (vue框架手册)https://router.vuejs.org/zh-cn/ (vue框架路由手册)https://github.com ...

  10. JAVA SE 803 考试前突击

    考试的宗旨仍然是掌握基础知识,不过鉴于Oracle的这个认证考试还有不少的大家来找茬的成份在,所以一定一定要细心为上.   关于抽象类的坑点集合: 抽象类不是必须得有抽象方法,但有抽象方法的类必须是抽 ...