内联Web App Manifest?

mar*_*nig 5 html ruby-on-rails manifest

我有一个包含数千个静态单页应用程序的市场/ Web应用程序.

希望为每个单页面应用程序添加一个Web App Manifest(<head> </head>对应stem_url于所有urls给定SPA 的{root} /index.html ).

标准方法:

<link rel="manifest" href="/manifest.json">
Run Code Online (Sandbox Code Playgroud)

...似乎不是一个很好的前进方式,因为这意味着数千个manifest.js文件被转储到/public文件夹中(它是一个rails应用程序!)并且最终会使app/assets编译工作非常繁重起来.

有没有一种方法可以像我们做样式标签一样内联清单json:

<style>
  body { // style here }
  …
</style>
Run Code Online (Sandbox Code Playgroud)

相当于清单声明:

<manifest>
 { 
   "name": "HackerWeb",
   "short_name": "HackerWeb",
   …
}
</manifest>
Run Code Online (Sandbox Code Playgroud)

RAD*_*ack 11

您可以使用数据内联json:url.所以不是标准

<link rel="manifest" href="/manifest.json">
Run Code Online (Sandbox Code Playgroud)

这将是

<link rel="manifest" href='data:application/manifest+json,{ "name": "theName", "short_name": "shortName", "description": "theDescription"}' />
Run Code Online (Sandbox Code Playgroud)

我也想内联它并且刚刚尝试过.有用

  • 少数选项(例如 start_url、icons src)无法以这种方式工作。https://i.imgur.com/iRuIeuz.png (2认同)

Ben*_*Ben 9

改进的答案

正如 RADXack 所提到的,这非常有效

<link rel="manifest" href='data:application/manifest+json,{ "name": "theName", "short_name": "shortName", "description": "theDescription"}' />
Run Code Online (Sandbox Code Playgroud)

但是如果您想添加更多属性(例如颜色或 start_url)怎么办?

然后在您的服务器上您可以添加:

const manifest = JSON.stringify({
        name: "React Doc",
        short_name: "React"
        start_url: "/",
        background_color: "#fffff",
        theme_color: "#ff00ff",
        display: "standalone",
    });

const HTML = `<!DOCTYPE html>
<html lang="en">
  <head>
   <link rel="manifest" href='data:application/manifest+json,${encodeURIComponent(manifest)}' />
   ...rest of your code`
Run Code Online (Sandbox Code Playgroud)

encodeURIComponent将为您转换所有特殊字符。

这样,您就可以确定无论传递的数据是什么,它都是 URL 友好的