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. 巧用SQL语句中的OR查询完成业务新需求-2022新项目

    一.业务场景 目前参与开发的项目,之前的一个已上线的版本中有一类查询是根据两张表进行LEFT JOIN查询用来取数据, 主表中有一个字段field用来区分不同的数据类型比如说A/B/C.前面的版本中只 ...

  2. 摆脱鼠标系列 - vscode 花括号 开始结束 间的跳转 Ctrl + Shift + \

    为什么 摆脱鼠标系列 - vscode 花括号 开始结束 间的跳转 Ctrl + Shift + \ 快速移动到下一个 注意有时候输入法会有问题 因为 Ctrl + Shift 是切换输入法,所以回头 ...

  3. Rust GUI库 egui 的简单应用

    目录 简介 简单示例 创建项目 界面设计 切换主题 自定义字体 自定义图标 经典布局 定义导航变量 实现导航界面 实现导航逻辑 实现主框架布局 调试运行 参考资料 简介 egui(发音为"e ...

  4. 基于python的socket通信之阿里云socket端口不通的解决方案

    问题描述: 使用python脚本进行socket业务流程,前几天还可以通信很好的,今天突然发现端口不通了.那就排查端口为啥不通了呢? 方案一:设置阿里云安全组 这个网上不少例子,笔者也按照这个操作过, ...

  5. HDU 2056:Rectangles(两个矩形交点的性质)

    一.原题链接 Problem - 2056 (hdu.edu.cn) 二.题面 Given two rectangles and the coordinates of two points on th ...

  6. Java/Kotlin Double保留小数点后几位

    下面以保留2位小数,且按照四舍五入规则的例子 方法 1.BigDecimal.setScale() 此方法得到的还是个double数值 double one = 5.864; BigDecimal t ...

  7. Spring Boot框架中使用Jackson的处理总结

    1.前言 通常我们在使用Spring Boot框架时,如果没有特别指定接口的序列化类型,则会使用Spring Boot框架默认集成的Jackson框架进行处理,通过Jackson框架将服务端响应的数据 ...

  8. vscode 屏蔽某些文件夹

    vscode 屏蔽某些文件夹 File--Preferences--Settings(Ctrl + ,) 搜索框里搜索 Files:Exclude 点击 Add Pattern ,如果想屏蔽掉所有 . ...

  9. 《Effective Java》笔记

    2. 创建和销毁对象 1. 静态工厂方法替代构造器 优点: 名称清晰 每次调用不必new对象 可以返回原返回类型任意子类型对象 返回的对象可以随着调用而发生改变 返回的对象所属的类,在编写该静态工厂方 ...

  10. sklearn数据集使用(鸢尾花)

    1 2 from sklearn.datasets import load_iris 3 4 """ 5 sklearn数据集使用 6 :return: 7 " ...