PWA无法弹出添加左面提示功能

发布于 2022-09-06 09:30:57 字数 3586 浏览 14 评论 0

百度很多教程都说pwa应用可以弹出一个 《是否添加到桌面》这样的提示框
也按照lavas框架的文档应用添加横幅去设置,还是达不到效果,请问一下我究竟那里写错了

需求: 弹出提示框,提示是否添加应用到桌面

测试: (打包后使用express开启本地服务器测试的)

chrome浏览器 点击 add to homescreen 可以添加网页到桌面
ios: 10.0.2 safari可以添加到桌面,uc无法添加网页到桌面,两者都无法弹出提示框
安卓: 没有测试

技术:

前端: vue
后端: node

代码:

manifest.json

{
  "name": "web_app",
  "short_name": "web_app",
  "scope": "/",
  "description": "The app that helps you understand PWA", //用于描述应用
  "display": "standalone", // 定义开发人员对Web应用程序的首选显示模式。standalone模式会有单独的
  "start_url": "/", // 应用启动时的url
  "theme_color": "#313131", // 桌面图标的背景色
  "background_color": "#313131", // 为web应用程序预定义的背景颜色。在启动web应用程序和加载应用程序的内容之间创建了一个平滑的过渡。
  "icons": [ // 桌面图标,是一个数组
    {
      "src": "/static/images/android-chrome-192x192.png",
      "sizes": "192x192",
      "type": "image/png"
    }, {
      "src": "/static/images/android-chrome-512x512.png",
      "sizes": "512x512",
      "type": "image/png"
    }, {
      "src": "/static/images/apple-touch-icon-144x144.png",
      "sizes": "144x144",
      "type": "image/png"
    }
  ]
}

sw-register.js

navigator.serviceWorker && navigator.serviceWorker.register('/service-worker.js').then(() => {
  //
})

// 「弹出添加到主屏对话框」事件
window.addEventListener('beforeinstallprompt', event => {
  // 这个 `event.userChoice` 是一个 Promise ,在用户选择后 resolve
  event.userChoice.then(result => {
    console.log(result.outcome)
    // 'accepted': 添加到主屏
    // 'dismissed': 用户不想理你并向你扔了个取消
  })
})

构建使用sw-precache-webpack-plugin sw-register-webpack-plugin

webpack.prod.conf

// service worker caching
    new SWPrecacheWebpackPlugin(config.swPrecache),
    new SwRegisterWebpackPlugin({
        filePath: path.resolve(__dirname, '../src/sw-register.js')
    })

index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no">
    <link rel="manifest" href="/static/manifest.json">
    <!-- Add to home screen for Safari on iOS -->
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <meta name="apple-mobile-web-app-title" content="web_app">
    <link rel="apple-touch-icon" href="/static/images/apple-touch-icon-120x120.png">
    <!-- Add to home screen for Windows -->
    <meta name="msapplication-TileImage" content="/static/images/msapplication-icon-152x152.png">
    <meta name="msapplication-TileColor" content="#000000">
    <title>douban</title>
  </head>
  <body>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

clipboard.png

clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

怂人 2022-09-13 09:30:57

查阅兼容性
挺多浏览器不怎么兼容这些api

白龙吟 2022-09-13 09:30:57

请问后来解决了吗 我用chrome也弹不出来。。

红尘作伴 2022-09-13 09:30:57

首先更新你的 Chrome 版本到 64 或以上。

然后在地址栏输入 chrome://flags,找到 Desktop PWAs 的选项将其 Enabled 了,然后 Chrome 会提示你重启浏览器。

重启浏览器后,PWA 添加到桌面的特性就已经具备了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文