首页 > 其他分享 >iframe跨域,获取iframe中元素

iframe跨域,获取iframe中元素

时间:2024-04-15 09:56:35浏览次数:19  
标签:qq 浏览器 跨域 微信 获取 iframe

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);
      });

标签:qq,浏览器,跨域,微信,获取,iframe
From: https://www.cnblogs.com/coderzdz/p/18135203

相关文章

  • HTML 高级用法 iframe框架
    HTML中,<iframe>标签允许一个HTML文档被嵌入到另一个HTML文档中。这种技术可以用于多种用途,比如嵌入第三方内容(例如YouTube视频或Google地图)、实现网页中的多窗口布局,或者加载异步内容而不影响主页面的加载时间。<iframe>的高级用法可以增强网站的功能性和用户体验,但也需要注意使......
  • Java调用第三方接口获取数据并存储,思路加代码
    思路:1.根据第三方接口返回的字段来创建实体类,用来接收数据2.建立连接,提供两种方式。来获取数据3.实体类转换并存储方法一:URL建立连接进行接收数据依赖<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifa......
  • Java登陆第四十二天——跨域
    浏览器拥有最基本的安全机制,同源策略。 违背同源策略的交互,会被浏览器认为是不安全的交互,所以不解析。什么是域?(源) 协议,域名,端口。什么是跨域? 访问不同的域。 即便协议,域名相同,端口号不一样也会违背同源策略。前后端分离后,前端服务器负责视图,后端服务器负责数据。 不......
  • thinkphp+vue跨域报错解决方案
     使用vue的axios.post向后台服务器的发送数据时报错:CORSpolicy:Responsetopreflightrequestdoesn'tpassaccesscontrolcheck:No'Access-Control-Allow-Origin'headerispresentontherequestedresource. 解决办法在public/index.php文件中添加以下代码://......
  • 从Google网页中通过正则表达式获取json如何转换unicode对象
    场景:Google爬虫,获取下拉框搜索关键词,需要获取页面的里面的json字符串如下面:'{\\x22aa\\x22:{},\\x22abd\\x22:{\\x22abd\\x22:false,\\x22deb\\x22:false,\\x22det\\x22:false},\\x22async\\x22:{},\\x22attn\\x22:{},\\x22bgd\\x22:{\\x22ac\\x22:true,\\x......
  • Ant - Form 自定义组件 form.getFiledsValue 如何获取值
    import{FC,useState}from'react';importtype{SelectProps}from'antd';import{Select,Space,Flex,Input,Button}from'antd';/***扩展选择器组件,可以通过键盘enter输入一个Option*/constInputSelect:FC<{defaultOptio......
  • Python量化交易系统实战--获取股票数据
     我们首先需要获取股票数据。代码IDE选择:PyCharm计算机环境:MacOS  一、获取股票数据的三种方式 二、获取股票数据这里选定的是使用JoinQuant平台提供的免费接口(有时间范围限制),简单整理如下。使用前需要先申请权限并初始化授权:fromjqdatasdkimport*auth('','......
  • 【虚幻引擎】DTProjectSettings 蓝图获取基本项目配置插件使用说明 获取项目命名,项目
    本插件可以使用蓝图获取到项目的一些基本配置,如获取:公司名、公司识别名、版权声明、描述、主页、许可条款、隐私政策、项目ID、项目命名、项目版本、支持联系方式、项目显示标题、项目调试标题信息、应保留窗口宽高比、使用无边框窗口、以VR启动、允许窗口重设大小、允许关闭、允......
  • 快速获取MD3800i存储管理口IP地址的方法
    快速获取MD3800i存储管理口IP地址的方法打开抓包软件wireshark,选取抓包网卡后,用笔记本电脑随便设置个IP地址,笔记本网口网线直连MD3800i管理口网口,等待一会就能看到DHCP信息,是MD3800i请求获取DHCP。获取不到DHCP分配的IP后,MD3800i会改成存储默认IP地址,会发ARP包。用抓包软件直接能......
  • 七大获取免费SSL证书方式
    对于个人网站、小型企业以及测试用户来说,免费的ssl证书是个不错的选择,下面分享几个免费证书获取方式:一、阿里云通过阿里云SSL证书服务可以获得免费型DVSSL,每个阿里云账号可以申请20个的免费SSL证书资源包,登录阿里云直接搜索免费SSL即可,注意目前阿里云免费证书时效为3个月。二......