基于iframe的移动端嵌套

2023-05-16

需求描述

上上周接到了新的项目,移动端需要做一个底部有五个导航,点击不同的导航页面主体显示不同的页面,其中两个页面是自己做,而另外三个页面是引用另外三个网址,其中两个网址为内部项目,另外一个为外部(涉及跨域)。

问题

考虑再三后最省时间成本的就是使用iframe,虽然在移动端使用,我的内心是很拒绝的,不过其他方案调研了下都不太符合现状。每点击一次加载一个新的iframe,比较懒,所以两个新页面也做成了iframe,在做的过程中出现了如下问题,这里总结一下:
1.嵌入的iframe页面无法滚动
2.meta元素的ontent不一致,外部的页面使用width=device-width,而引用的其中一个页面的width=640,这导致那个页面渲染的时候无法全屏缩小
3.ios下其中的一个页面莫名其妙的扩大
4.iframe的页面a标签的锚点失效
5.当我点击a加载了a的iframe页面,在切换到b,这个时候b页面字体莫名的变大
6.导航栏有个样式要求,active的时候icon是为红色的icon,其他状态下则为灰色的。其中的一个需求为返回的时候从哪里点出去返回到哪里
7.某个安卓机后返回无法重新加载iframe

解决

声明嵌入的iframe页面其中4个都是内部项目,同源的,所以大部分处理的问题不存在跨域问题。

1.嵌入的iframe页面无法滚动

在iframe外层包裹一个div,然后将其设置为可滚动

<div style="webkit-overflow-scrolling: touch;overflow-y: scroll;">
    <iframe></iframe>
</div>

并且在禁止浏览器的默认行为,不然类似于微信滑动到底部的时候会和回弹的效果进行冲突

$('body').on('touchmove',function(e){
    e.preventDefault();
});

2.meta元素的ontent不一致

这个暂时没有好办法,iframe渲染的meta也是默认走的最上层的meta,所以他自己的内部meta是失效的,由于该项目属于自己部门,有权限可以修改代码,所以最后我重新设置该页面的meta,重写了这个页面的样式。

3.ios下其中的一个页面莫名其妙的扩大

经排查我发现对于标题这类的设置了white-space:nowrap, 以及iframe页面用了swiper设置的宽度为100%,而移动端为了自适应body也设置的为100%这种情况下,ios下iframe而里面的页面会扩大。
我的解决办法是在原项目下页面html,body依旧设置为100%,而初始化的时候js获取屏幕的宽度再设置body的宽度。

4.iframe的页面a标签的锚点失效

若iframe不涉及跨域,网上有兼容代码可以重新设置a标签,跨域解决不了,因为跨域的情况下,外部页面是无法获取到iframe下的元素的,最后这个导航做了外部跳转。

5.iframe页面切换的时候,切换后的页面样式莫名变大

之前我做页面切换,是用过不重新加载iframe,而是直接修改了iframe的url,但是好像在这种情况下,可能之前上一个页面加载的css没有完全清除掉,所以导致css混乱。所以最后每次切换的时候,豆浆iframe给remove掉,在append加载新的iframe。

6.页面点击跳转之后,返回的状态标记

使用了localStorage记录了url,navIndex

7.某个安卓机后返回无法重新加载iframe

返回后再append的iframe的代码下再让其重新渲染下

$("#iframe").attr("src",url).ready()

8.其他

获取iframe内部元素

document.getElementById('iframe').onload = function(){
let doc = document.getElementById('iframe').contentDocument;
 }

中间涉及到了跨域请求,由于后台接口之前就写了,无法修改,但传过来的中文乱码接口默认的解析为gbk,所以需要设置scriptCharset: 'gbk',

$.ajax({
    type: "GET",
    url: url,
    dataType: "jsonp",
    jsonp: "callback",
    jsonpCallback: "data_callback",
    contentType: "application/x-javascript,charset-type=gbk",
    scriptCharset: 'gbk',
    crossDomain: true,
    success: function (json) {});
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于iframe的移动端嵌套 的相关文章

  • Javascript闭包:从理论到实现,[[Scopes]]的每一根毛都看得清清楚楚

    昨天我写到 所有Javascript函数都是闭包 xff0c 有些同学表示还是接受不能 我好好的一个函数 xff0c 怎么就成闭包了 xff1f 那么 xff0c 让我们来探究一下 xff0c Chrome xff08 V8 xff09 到
  • mysql5.7安装审计插件libaudit_plugin.so

    1 下载插件 https bintray com mcafee mysql audit plugin release 1 1 7 805 files 2 解压插件复制到mysql lib库插件目录下 xff1a unzip audit pl
  • 通过jdbc连接hive报java.sql.SQLException: Method not supported问题

    今天尝试通过jdbc连接hive xff0c JDBC直接连接是正常成功的 xff0c 实例 xff1a import java sql Connection import java sql DriverManager import jav
  • DHCP介绍及H3C配置DHCP

    1 DHCP引入 1 简介 DHCP xff08 动态主机设置协议 xff09 是一个局域网的网络协议 xff0c 使用UDP协议工作 xff0c 主要作用是集中的管理 分配IP地址 xff0c 使网络环境中的主机动态的获得IP地址 Gat
  • centos7-内核版本降级

    环境介绍 线上环境运行centos 内核版本规定为 xff1a CentOS Linux release 7 3 1611 Core 查看内核版本参考命令 xff1a root 64 localhost cat etc redhat rel
  • SLAM中多目三角化

    多目三角化 1 闭式求解1 1 DLT 最小二乘方法求解1 2 最小化3D距离 2 构建优化方法求解3 构建高斯深度滤波器 LSD SLAM4 构建Beta分布滤波器 SVO5 EKF SLAM参考资料 在能实现双目计算特征点的深度基础上
  • 微软操作系统 Windows Server 2012 R2 官方原版镜像

    微软操作系统 Windows Server 2012 R2 官方原版镜像 Windows Server 2012 R2 是由微软公司 xff08 Microsoft xff09 设计开发的新一代的服务器专属操作系统 xff0c 其核心版本号
  • 最近很忙,也很累,忙里偷闲,尝试了下apache solr的安装

    最近很忙 xff0c 也很累 xff0c 忙里偷闲 xff0c 尝试了下apache solr的安装 第一次接触java的 xff0c 就和初次安装NET一样 部署开发环境折腾来折腾去 几经波折总算成功了 分享下个人安装的过程 xff1a
  • "类工厂模式"改写SqlHelper

    看到标题您一定很疑惑 xff0c 23种经典设计模式什么时候多了一个 34 类工厂模式 34 稍等 xff0c 请听我慢慢道来 实践是检验真理的唯一途径 最近用了 34 类工厂模式 34 改写了我公司的SqlHelper类 xff0c 改写
  • C++中基于Crt的内存泄漏检测

    尽管这个概念已经让人说滥了 xff0c 还是想简单记录一下 xff0c 以备以后查询 ifdef DEBUG define DEBUG CLIENTBLOCK new CLIENT BLOCK FILE LINE else define D
  • revit卸载/完美解决安装失败/如何彻底卸载清除干净revit各种残留注册表和文件的方法...

    在卸载revit重装revit时发现安装失败 xff0c 提示是已安装revit或安装失败 这是因为上一次卸载revit没有清理干净 xff0c 系统会误认为已经安装revit了 有的同学是新装的系统也会出现revit安装失败的情况 xff
  • 内核必须懂(三): 重编Ubuntu18.04LTS内核4.15.0

    目录 前言编译前准备编译安装重启之后最后 前言 之前在写系统调用的时候也说过 但是当时理解有限 写的不好 这次再重新编译内核 分享经验 编译前准备 首先补包 sudo apt get install build essential kern
  • STL视频_01

    ZC xff1a 这里视频里面有一个调试小技巧 xff0c VS08 VS2010开始 xff0c 控制台程序会自动退出 xff08 不像VC6 xff09 xff0c 那么可以在 函数退出的最后一句语句上设置断点 xff0c 然后查看控制
  • 四轴自适应控制算法的一些尝试开源我的山猫飞控和梯度在线辨识自适应等算法—(转)...

    本文的最主要目的在于抛砖引玉 xff0c 阿莫论坛真的是非常好的一个论坛 xff0c 没有这个论坛 xff0c 没有那么多这个论坛上的前人无私的奉献和热烈的讨论 xff0c 我想我是怎么也无法入门四轴的控制的 只是论坛上已经很多年都没有看到
  • ubuntu VNC连接树莓派

    其实ubuntu vnc连接树莓派很简单 xff0c 首先给树莓派安装vnc服务 xff0c 然后打开vnc服务 xff0c 最后ubuntu用远程桌客户端测试连接就好了 不过要注意连接前一定要打开vnc服务 xff0c 树莓派连接要有控制
  • nuttx学习-0:模拟安装

    一 Nuttx 模拟运行环境的安装 xff1a 1 文件要求 xff0c 主要需要三个文件 xff1a nuttx 7 24 tar apps 7 24 tar nuttx tools tar 2 环境要求 xff1a sudo apt g
  • ORB-SLAM3 安装运行

    ORB SLAM3 安装运行 1 Pangolin 安装2 ORB SLAM3安装3 数据集测试3 1 EuRoC 双目 43 IMU测试3 2 TUM VI 双目鱼眼 43 IMU测试3 3 ROS接口3 3 1 启动EUROC 双目 4
  • ros:出现:error: ros/ros.h: No such file or directory

    出现这个问题是因为在cmakelist txt中没有声明对roscpp的依赖 在find package中添加roscpp 重新执行就ok了 转载于 https www cnblogs com fuhang p 9934092 html
  • IOS-如何优雅地拦截按钮事件(判断是否需要登录)

    关于这个标题 xff0c 起因是这样的 最近一次做项目需求时 xff0c 遇到这样一个需求 xff0c 就是本来我们App是必须注册或者第三方登录才可以使用 xff0c 现在希望不登录也可以浏览App里面的内容 xff0c 只是在需要的时候
  • postman安装使用教程---图文讲解

    一 安装postman 1 xff0c 安装包安装 官网下载地址 https www getpostman com 选择好对应的版本下载 下载完后直接安装 2 xff0c 插件包安装 可以在谷歌的应用商店里面找到 或者在网上下载 准备了一个

随机推荐

  • ArUco----一个微型现实增强库的介绍及视觉应用(一)

    ArUco 一个微型现实增强库的介绍及视觉应用 xff08 一 xff09 ArUco 一个微型现实增强库的介绍及视觉应用 xff08 一 xff09 一 ArUco简介 ArUco是一个开源的微型的现实增强库 xff0c 目前好像已经集成
  • matlab 图像基本矩阵,MATLAB基本的使用方法归纳(图像,矩阵及函数)

    读取图像 xff1a 用imread函数读取图像文件 xff0c 文件格式可以是TIFF JPEG GIF BMP PNG等 比如 gt gt f 61 imread 39 chestxray jpg 39 读进来的图像数据被保存在变量f中
  • VR直播云服务解决方案

    VR直播 通过VR xff08 虚拟现实 xff09 技术 xff0c 用户通过佩戴相关硬件设备 xff0c 通过平台提供的APP进行直播观看 主播需采用360 全景的拍摄设备 xff0c 捕捉多角度画面 xff0c 进行多画面传输后 xf
  • VirtualBox快照(Snapshot)功能使用及注意事项

    这几天在使用QT编写一个ARM的图形化应用程序 xff0c 需要在PC端使用linux下的QtCreator 搭建环境神马的还是挺麻烦的一个过程 依照我的风格 xff0c 这么麻烦的东西一定不要重复做第二遍 剧透下 xff0c 最后还是很悲
  • docker学习笔记11:Dockerfile 指令 CMD介绍

    我们知道 xff0c 通过docker run 创建并启动一个容器时 xff0c 命令的最后可以指定容器启动后在容器内立即要执行的指令 xff0c 如 xff1a docker run i t ubunu bin bash 表示容器启动时立
  • 麦克纳姆轮运动学分析

    麦克纳姆轮运动学分析 是最常见的安装方式 麦轮底盘的正逆运动学模型 以O 长方形的安装方式为例 xff0c 四个轮子的着地点形成一个矩形 正运动学模型 xff08 forward kinematic model xff09 将得到一系列公式
  • 传小米秘密自研操作系统mios 将应用于小米4(

    http tieba baidu com f kw 61 E5 8D 97 E4 BA AC E8 85 8B E8 87 AD E5 8C BB E9 99 A2 E3 80 90 E5 92 A8 E8 AF A2QQ EF BC 9A
  • OV2SLAM 安装运行

    OV2SLAM 安装运行 1 安装依赖项1 1 安装 OpenGV1 2 安装OV2SLAM 2 运行 OV2SLAM2 1 运行EUROC数据集2 2 运行KITTI数据集 参考资料 OV2SLAM 1 是2021年新开源出来的单目 43
  • IMU助力无人机自主精准着陆

    一盒用户急需的药品由无人机配送到小区中 xff0c 一键下单10分钟热气腾腾的外卖随着无人机送到家门口 这不是科幻作品中才有的景象 xff0c 而是已经实现的场景 但在实际应用中 xff0c 无人机配送还存在着预估位移不准确 着陆偏差过大等
  • Maven自动FTP远程部署

    参照官网文档 xff1a https maven apache org plugins maven deploy plugin examples deploy ftp html 1 在pom xml中加入 xff1a lt project
  • 面试感悟----一名3年工作经验的程序员应该具备的技能

    原文地址http www cnblogs com xrq730 p 5260294 html xff0c 转载请注明出处 xff0c 谢谢 xff01 前言 因为和同事有约定再加上LZ自己也喜欢做完一件事之后进行总结 xff0c 因此有了这
  • c语言菜单经典实例

    include lt conio h gt include lt dos h gt include lt graphics h gt include lt stdio h gt include lt stdlib h gt 定义一些常数 d
  • Docker(二):微服务教程

    Docker 是一个容器工具 xff0c 提供虚拟环境 很多人认为 xff0c 它改变了我们对软件的认识 站在 Docker 的角度 xff0c 软件就是容器的组合 xff1a 业务逻辑容器 数据库容器 储存容器 队列容器 xff0c Do
  • 让进程在后台可靠运行的几种方法

    Linux 技巧 xff1a 让进程在后台可靠运行的几种方法 想让进程在断开连接后依然保持运行 xff1f 如果该进程已经开始运行了该如何补救 xff1f 如果有大量这类需求如何简化操作 xff1f 我们经常会碰到这样的问题 xff0c 用
  • 小米路由器mini拆解,附上独家对MT7620A见解

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 小米路由mini采用单核MT7620A处理器 xff0c 搭配128MB DDR3 xff0c 内置智能家居控制中心 xff0c 和标准版一样提供2x2双频天线 xff0c
  • 采购收货的异常

    仓库发OA过来 xff0c 说有一票采购订单收货的时候提示红灯错误 xff0c 截图如下 xff1a 双击错误消息 xff0c 提示该消息是出自于M7429 百度 xff0c 没有相关资料 问群里 xff0c 也没人懂 于是通过 H 来查看
  • 【ES6基础】解构赋值(destructuring assignment)

    我们经常可以在其他编程语言 如GO语言 中看到多返回值这种特性 xff0c 因为在很多实际场景中 xff0c 函数的返回值中 xff0c 函数的返回值并不只有一个单一的值 ES6之前 xff0c 并没有可以直接使用语法来实现多返回值的特性
  • 视觉导航小车开源项目(1)—小车底盘

    小车底盘 1 更新日志1 1 硬件方面1 2 软件方面 2 底盘硬件结构2 1 底盘机械组装2 2 底盘硬件框图2 3 底盘电气系统 3 差速底盘软件结构3 1 控制板介绍3 2 代码结构3 3 差速底盘运动学模型 参考资料 注 xff1a
  • 一些webpack配置优化手段

    loader 设置include或者exclude 一般第三方包都是打包好的 xff0c 无需再打包 xff0c 特别是babel loader eslint loader span class hljs attr test span sp
  • 基于iframe的移动端嵌套

    需求描述 上上周接到了新的项目 xff0c 移动端需要做一个底部有五个导航 xff0c 点击不同的导航页面主体显示不同的页面 xff0c 其中两个页面是自己做 xff0c 而另外三个页面是引用另外三个网址 xff0c 其中两个网址为内部项目