pwa在iframe下能否显示,以及在iframe下相关问题解析

embedded/2024/10/18 19:28:38/

pwa__iframe_0">pwa + iframe

当a域名没有使用pwa
b域名项目使用了pwa
把b嵌套在a中:

<title>没有使用pwa的a项目</title>
<iframe frameborder="0" height="100%" src="https://b.com" width="100%"></iframe>

打开a网站会发现,a网站是没有pwa的安装按钮的。

pwa_11">a网站没有pwa的原因

其实主要在于iframe下能否触发子页面的beforeinstallprompt

简单来说:

beforeinstallprompt 事件是用于 Progressive Web Apps (PWA) 的一个事件,它会在浏览器准备好显示安装提示时触发。根据 Web 的安全模型,beforeinstallprompt 事件只能在顶级上下文中被触发,即在主页面中,而不能在 iframe 中触发。

因此,子组件(在 iframe 中的内容)是无法直接触发 beforeinstallprompt 事件的。如果需要在 iframe 中的内容提示用户安装 PWA,建议在主页面中处理这个事件,并根据需要与 iframe 中的内容进行通信,例如使用 postMessage API 进行跨域通信。

总结来说,iframe 不能直接触发子组件的 beforeinstallprompt,而需要通过父页面的处理来实现与用户交互的功能。

具体来说:

beforeinstallprompt 事件是为了支持 Progressive Web Apps (PWA) 的安装而设计的,它在浏览器决定可以显示安装提示时触发。由于安全用户体验的原因,某些限制被施加在这个事件的触发和响应上。

  1. 安全性: iframe 可能加载来自不同源的内容,这可能会引发安全问题。允许 iframe 中的页面触发 beforeinstallprompt 事件可能会导致恶意页面诱导用户安装不安全的应用。因此,浏览器限制了该事件的触发权限,只在顶级上下文中允许
  2. 用户体验: 通过限制 beforeinstallprompt 事件的触发,仅允许顶级页面处理,确保用户在明确的上下文中接收到安装提示。这样可以避免在嵌入的 iframe 中出现意外的安装提示,从而提升用户体验。
  3. 浏览器实施: 不同的浏览器在处理 PWA 和相关事件(如 beforeinstallprompt)时,通常采取了一致的策略,确保用户的行为不会被嵌套内容(如 iframe)意外干扰

有关 PWA 和相关事件的行为可以在以下文档中找到:

  • MDN Web Docs - beforeinstallprompt:(该文档描述了 beforeinstallprompt事件的触发条件和使用方法)
  • Google Developers - Progressive Web Apps:(介绍了 PWA 的概念,包括安装提示的处理。)
  • W3C - Web App Manifest:(这是 PWA相关的标准文档,其中也提到了与应用安装相关的行为。)

总结

基于安全性和用户体验的考虑,beforeinstallprompt 事件只能在顶级上下文中触发,而无法通过 iframe 直接触发。如果需要在 iframe 中进行相应的操作,建议通过父页面进行处理并与 iframe 之间进行通信。


http://www.ppmy.cn/embedded/89067.html

相关文章

Git -- git stash 暂存

使用 git 或多或少都会了解到 git stash 命令&#xff0c;但是可能未曾经常使用&#xff0c;下面简单介绍两种使用场景。 场景一&#xff1a;分支A开发&#xff0c;分支B解决bug 我们遇到最常见的例子就是&#xff0c;在当前分支 A 上开发写需求&#xff0c;但是 B 分支上有…

旧衣回收小程序,旧衣回收行业新态势

进入网络时代后&#xff0c;互联网改变了大众的生活&#xff0c;传统的回收模式逐渐被淘汰&#xff0c;新兴的互联网旧衣回收受到了大众的关注&#xff01;通过技术创新为行业带来新模式&#xff0c;不断优化回收流程&#xff0c;提高回收效率&#xff0c;提升居民的回收体验&a…

力扣-41.缺失的第一个正数

刷力扣热题–第二十五天:41.缺失的第一个正数 新手第二十五天 奋战敲代码&#xff0c;持之以恒&#xff0c;见证成长 1.题目简介 2.题目解答 做这道题有点投机取巧的感觉&#xff0c;要求时间复杂度O(N),且空间复杂度O(1)&#xff0c;那么就是尽可能的去找到更多的可能性&…

吴恩达机器学习WEEK1

COURSE 1 WEEK 1 机器学习的应用 当我们有一个目标&#xff0c;不知道如何显示地写出来一个程序时&#xff0c;例如自动驾驶等&#xff0c;这时候就需要制定某些规则&#xff0c;让计算机自己去学习&#xff0c;即机器学习 机器学习就是沿用人脑学习的过程&#xff0c;逐步对…

【Linux脚本】Nginx日志分割的shell脚本

环境&#xff1a;CentOS Linux release 7.6.1810 (Core) 编写一个Nginx日志分割的shell脚本,以实现只保留最近一周的日志文件。这个脚本将会分割access.log和error.log文件,并保留最近7天的日志。 #!/bin/bash# Nginx日志目录 LOG_DIR"/usr/local/nginx/logs"# 日志文…

C语言之“文件操作”

文章目录 1. 什么是文件&#xff1f;&#xff08;1. 为什么使用文件&#xff1f;&#xff08;2.什么是文件2.1 程序文件2.2 数据文件2.3 文件名 2. 二进制文件和文本文件&#xff1f;3. 文件的打开和关闭3.1 流和标准流3.2 文件指针(用来管理流的)3.3 文件的打开与关闭 4. 文件…

RIP综合练习

要求&#xff1a; 1.合理使用IP地址划分网络&#xff0c;各自创建循环接口 2.R1创建环回172.16.1.1/24 172.16.2.1/24 172.16.3.1/24 3.要求R3使用R2访问R1环回 4.减少路由条目数量&#xff0c;R1,R2之间增加路由传递安全性 5.R5创建一个环回模拟运营商&#xff0c;不能…

Java:Thread类以及线程状态

文章目录 Thread类等待一个线程 - join()获取当前线程的引用sleep 线程状态 Thread类 等待一个线程 - join() 操作系统,针对多个线程的执行,是一个"随机调度,抢占式执行“的过程. 线程等待就是在确定两个线程的"结束顺序”. 我们无法确定两个线程调度执行的顺序,但…