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

avatar
作者
猴君
阅读量: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的安装按钮的。

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 和相关事件的行为可以在以下文档中找到:

总结

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

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!