PWA:为啥导航到 URI 仅在 URI 在 PWA 的清单中注册时才有效
Posted
技术标签:
【中文标题】PWA:为啥导航到 URI 仅在 URI 在 PWA 的清单中注册时才有效【英文标题】:PWA: Why navigation to a URI only works when the the URI is registered in the manifest of the PWAPWA:为什么导航到 URI 仅在 URI 在 PWA 的清单中注册时才有效 【发布时间】:2020-01-02 11:55:09 【问题描述】:我已经使用 Visual Studio 2017 创建了基于 javascript 的项目“Progressive Web App”。创建的项目包含一个文件"package.appxmanifest"
。当应用程序启动时,它会导航到 URI,该 URI 在清单中定义为 StartPage。此 html 页面包含一个链接,该链接应导航到其他站点。
window.location.href = 'other site'
仅当此 URI 在清单中明确注册为“Content-URI”(ApplicationContentUriRules) 时,此链接才有效。 是否可以允许所有链接不进入 Content-URIs?
【问题讨论】:
你想模仿 的行为吗?还是什么? 您可以发布您的网络清单吗? 【参考方案1】:使用 PWA 创建的 UWP 应用程序虽然依赖于浏览器,但仍具有 UWP 沙盒应用程序。
Content-URI
中出现的链接表示该链接是受信任的,其子路由可在 UWP 窗口中访问。但是如果你访问一个外部链接,行为会被定向到浏览器,浏览器会打开页面。
您可以使用通配符“*”尽可能匹配您需要的链接,如内容 URI 页面中所述,但这并不意味着允许在 UWP 窗口中访问所有链接。
最好的问候。
【讨论】:
【参考方案2】:可以在Rules 中使用通配符。
例如:http://*.mydomain.com/pwa/*/content
但作为一个Dave puts it:
不过,应用商店对提交使用 http://* 规则或第二个有效域中带星号的规则 名称标签。例如,http://*.com 也仅限于 Store。
所以,尽量减少规则集预先知道的主机名。
【讨论】:
【参考方案3】:来自 MS Docs:
通过 ACUR(也称为 URL 允许列表),您可以让 PWA 的 URL 直接访问 Windows 运行时 API。在 Windows 操作系统级别,将设置正确的策略边界以允许托管在您的 Web 服务器上的代码直接调用平台 API。当您将 PWA 的 URL 指定为 ApplicationContentUriRules 时,您可以在应用程序包清单文件中定义这些边界。
您的规则应包括应用的起始页以及您希望包含为应用页面的任何其他页面。 如果您的用户导航到您的规则中未包含的 URL,Windows 将在 Microsoft Edge 浏览器中打开目标 URL,而不是您的独立 PWA 窗口(WWAHost.exe 进程)。您还可以排除特定的 URL。
也许你可以设置一个一般的津贴规则(虽然不确定这是否是正确的方法):
<Application Id="App" StartPage="https://maApp.com/home">
<uap:ApplicationContentUriRules>
<uap:Rule Type="include" Match="https://*.*" WindowsRuntimeAccess="all" />
</uap:ApplicationContentUriRules>
通常使用 PWA,您可以在 Web 清单中为您的服务工作线程定义一个范围。然后,如果用户单击在此定义范围内导航的链接,该链接将在 PWA 窗口中打开。 如果您希望在浏览器选项卡中打开链接(因此在您的 PWA 之外),您必须将 target="_blank" 添加到锚标记。
如果您想了解更多关于 PWA 和 Web 清单的信息,我写了一封 article about it。
更新 对于 PWA,您通常希望仅在应用范围内导航。如果您需要重定向到外部资源/网站,则应在外部浏览器页面中打开目标页面,而不是在 PWA 范围内。因此,目前的行为对我来说似乎是正确的。
【讨论】:
Manifest 中的定义: 通配符没有任何改变。单击链接时,Edge-Browser 会在应用程序外部打开。以上是关于PWA:为啥导航到 URI 仅在 URI 在 PWA 的清单中注册时才有效的主要内容,如果未能解决你的问题,请参考以下文章
iPhone - 数据 URI(css 背景图像)仅在连接到 WIFI 时有效
为啥我的 .htaccess 仅针对 https / ssl 不将 uri 路径重定向到 index.php?
为啥 keycloak 会删除重定向 uri 中的 SSL?
asihttp 使用 POST 方法并将 nsMutabledata 发布到 uri,为啥我无法获得 asi 委托回调?