1.需求让iframe嵌入页面,并且没有滚动条,也就是相当于两个页面拼接在一起

  1. 跨域解决,通过框架配置代理
  proxy: {
'/medical': {
target: 'https://example.com',
changeOrigin: true,
pathRewrite: {
'^/medical': '',
},
},
}
  1. 获取iframe宽度,并设置iframe宽度,使其不出现滚动条
  <iframe
ref="iframe"
name="sonFrame"
class="iframe hide-in-large hide-in-medium"
width="100%"
:height="height"
marginWith="0"
scrolling="no"
src="/medical/example...."
frameborder="0"
></iframe> this.iframe = this.$refs.iframe;
// iframe加载完成后修改高度
this.iframe.onload = () => {
this.height = this.iframe.contentDocument.body.scrollHeight;
};

主要问题在于跨域之后无法获取iframe中元素,导致高度不获取,无法设置高度

++++++++++++++++++++++++++++++++++++++++++++++++++

4. 遇到新问题

  • iframe元素在mobile端显示,通过样式在非mobile端隐藏,手机横屏的时候样式为pc端,此时iframe元素样式文字大小会变大以匹配更大尺寸的屏幕,但是当横屏之后并不会恢复原来的字体大小
  • 解决:
      1. 通过v-if来进行重新渲染 => 缺点会进行重新网络请求
      1. 通过v-show 来进行元素的显示与隐藏 => 优点: 不会重新请求,但是在pc端也会进行dom的创建,此方法能够成功是因为在pc端尺寸的时候iframe不渲染出来不会响应式的改变文字大小

+++++++++++++++++++++++++++++++++++++++++++++++++++

5.微信浏览器/qq浏览器横屏切换回竖屏字体变大

由于微信浏览器与qq浏览器执行resize回调函数之后第一时间获取到的innerWidth 不是横屏之后的值因此需要,延时获取,然后重新渲染iframe

此时无法使用v-show,即使在resize时第一时间将iframe隐藏,但是iframe字体格式也已经变为了横屏尺寸字体

  • 处理代码
    <div class="mt-40">
<!-- 微信/qq浏览器需要重新加载iframe -->
<iframe
v-if="!isPc && isWeiXin"
width="100%"
marginWith="0"
scrolling="no"
src="/medical/ecp-cms/cdn-file/tac/content/WMS/0/TAC_MEDICAL.html"
frameborder="0"
></iframe>
<!-- 其余浏览器不需要重新渲染 -->
<iframe
v-show="!isPc && !isWeiXin"
width="100%"
marginWith="0"
scrolling="no"
src="example.html"
frameborder="0"
></iframe>
  computed: {
// 判断是否为微信浏览器/qq浏览器
isWeiXin() {
const ua = navigator.userAgent.toLocaleLowerCase();
return (
window.navigator.userAgent.includes('MicroMessenger') ||
ua.match(/tencenttraveler/) != null ||
ua.match(/qqbrowse/) != null
);
},
},
   window.addEventListener('resize', () => {
// 微信/qq浏览器 resize时第一时间获得的innerWidth值不是更新后的值,需要延时获取
const time = this.isWeiXin ? 100 : 0;
setTimeout(() => {
this.isPc = window.innerWidth > 719;
}, time);
});

iframe跨域,获取iframe中元素的更多相关文章

  1. 利用location.hash+iframe跨域获取数据详解

    前言 如果看懂了前文利用window.name+iframe跨域获取数据,那么此文也就很好理解了.一样都是动态插入一个iframe,然后把iframe的src指向服务端地址,而服务端同样都是输出一段j ...

  2. 利用window.name+iframe跨域获取数据详解

    详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.ifra ...

  3. 如何实现跨域获取iframe子页面动态的url

    有的时候iframe的子页面会动态的切换页面,我们在父页面通过iframe1.contentWindow.window.location只能获取同源的子页面的信息.获取跨域的子页面信息会报错. 这时可 ...

  4. iframe 跨域问题解决方案 利用window.name+iframe跨域获取数据详解

    详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.ifra ...

  5. 跨域获取iframe页面的url

    一:跨域获取iframe页面的url 1.在使用iframe页面的js添加以下内容 <script> var host = window.location.href; var histor ...

  6. IFrame跨域访问&&IFrame跨域访问自定义高度

    1.IFrame跨域访问: http://blog.csdn.net/fdipzone/article/details/17619673 2.IFrame跨域访问自定义高度: 由于JS禁止跨域访问,如 ...

  7. 利用window.name+iframe跨域获取接口数据

    最近做了一个表单广告,需要从接口读取数据,做完发现谷歌火狐下正常,360兼容和IE浏览器无法获取数据,以下是鲜明的对比:      调试发现报错了: 然后开发把接口改成支持windowname,一开始 ...

  8. postMessage 实现跨源通信 iframe 跨域获取url

    用postMessage实现跨源通信的方法实例 如:在www.bbb.com/index.html页面获取www.aaa.com/index.html的数据,以iframe的形式 www.aaa.co ...

  9. javascript跨域、iframe跨域访问

    1.window 对象 浏览器会在其打开一个 HTML 文档时创建一个对应的 window 对象.但是,如果一个文档定义了一个或多个框架(即,包含一个或多个 frame 或 iframe 标签),浏览 ...

  10. 在IE浏览器中iframe跨域访问cookie/session丢失的解决办法

    单点登录需要在需要进入的子系统B中添加一个类,用于接收A系统传过来的参数: @Action(value = "outerLogin", results = { @Result(na ...

随机推荐

  1. vue table 里面 slot 的模板复用 slot-scope template v-for

    vue table 里面 slot 的模板复用 slot-scope template v-for 需求 经常在table里面要有自定义列,但是会有相同的自定义列,这个时候又不想写很多一样的templ ...

  2. vuecli-vite-vue3-init 项目架子 快速开发 webpack打包

    要vite的开发的快速 和 webpack打包 开发的时候 用vite,可以打包一个本地可以直接双击,不用起服务的代码 这个架子的缺点就是 vite和vuecli 两套双配置 正式公司项目 还是vue ...

  3. [已读带总结] Effective JavaScript 编写高质量JavaScript代码的68个有效方法

    目录 电子书下载:https://www.jb51.net/books/328297.html 第2章 第11条 熟练掌握闭包 https://www.cnblogs.com/wengxuesong/ ...

  4. Linux 常见缩写命令英文全称

    linux 命令参考Linux 命令大全: https://man.linuxde.net/ awk = "Aho Weiberger and Kernighan" 三个作者的姓的 ...

  5. linux怎么添加用户

    在Linux中添加普通新用户 超级用户(也称为"root")是一个具有修改系统中任何文件权力的特别账号.在日常工作中,最好不要使用超级用户账号进入系统,因为任何错误操作都可能导致巨 ...

  6. verilog基本语法之always和assign

    always和assign的作用 一.语法定义 assign,连续赋值.always,敏感赋值.连续赋值,就是无条件全等.敏感赋值,就是有条件相等.assign的对象是wire,always的对象是r ...

  7. KingbaseES V8R6 等待事件之IO类BufFileRead BufFileWrite

    等待事件含义 当数据库创建临时文件时,会发生IO:BufFileRead和IO:BufFileWrite等待事件.当操作需要的内存比当前定义的work_mem内存参数更多时,会将临时数据写入磁盘永久存 ...

  8. 新零售SaaS架构:客户管理系统的应用架构设计

    客户管理系统的应用架构设计 应用层定义了软件系统的应用功能,负责接收用户的请求,协调领域层能力来执行任务,并将结果返回给用户,功能模块包括: 客户管理:核心功能模块,负责收集和更新客户信息,包括个人资 ...

  9. ssh登录太慢了,每次都要20s

    背景 大家工作时,少不了ssh登录各个服务器,我这边手里也有很多服务器,有一些登录很快就进去了,有些要卡半天才能进去.之前以为是公司网络问题,每次也就忍了,这次突然不想忍了,决定定位一下. 我这边的服 ...

  10. #模拟#B 字串修改

    题目 有两个字符串\(s,t\),其中\(s\)只包含小写字母以及 *,\(t\)只包含小写字母. 你可以进行任意多次操作,每次选择\(s\)中的一个 *,将它修改为任意多个(可以是0个)它的前一个字 ...