【发布时间】:2014-08-02 05:48:19
【问题描述】:
我正在尝试将现有的 Web 应用程序移植到 Windows Phone 8.1(以及更高版本的 Windows 8.1)。这不是静态内容,而是具有大量客户端功能的动态页面。
我的default.html 文件有<iframe src="https://remote.example.com/app.html"></iframe>。
iframe 中的内容在模拟器中有效,而在初始 HTML 中直接引用的资源似乎也有效。但是,我的网络应用程序却触发了几个这样的错误:
SEC7117:对https://cdn.remote.example.com/extra.js 的网络请求未成功。 您的应用程序清单未声明以下功能:internetClient privateNetworkClientServer
https://cdnjs.cloudflare.com/... 和 https://example.cloudfront.net/... 出现类似错误
模拟器只是好心,一旦应用在真实设备上运行,这些资源将根本无法使用。
我的package.appxmanifest 文件包括以下内容:
<ApplicationContentUriRules>
<Rule Match="https://remote.example.com/" Type="include" />
<Rule Match="https://cdnjs.cloudflare.com/" Type="include" />
<Rule Match="https://example.cloudfront.net/" Type="include" />
<Rule Match="https://cdn.remote.example.com/" Type="include" />
</ApplicationContentUriRules>
...
<Capabilities>
<Capability Name="internetClientServer" />
<Capability Name="picturesLibrary" />
<Capability Name="internetClient" />
<Capability Name="privateNetworkClientServer" />
<DeviceCapability Name="location" />
<DeviceCapability Name="webcam" />
</Capabilities>
为什么会发生这些 SEC7117 错误?我尝试使用 <x-ms-webview></x-ms-webview> 元素而不是 iframe,但随后许多 Web 平台 API(例如 HTML5 GeoLocation)停止工作,并且 Microsoft 自己的指南似乎使用 MSWebView 处理静态内容。
出于安全目的,我真的希望我的网络应用程序在“网络上下文”中执行,并使用postMessage 来执行类似应用程序的活动(这部分正在工作)。通过像这样直接从主机获取内容,我可以更新 Windows Phone 应用程序的这一部分,而无需通过 Marketplace 推送更新。
我有什么遗漏吗?我使用了错误的元素吗?其他人如何为 Windows Phone 8.1 打包现有的 Web 应用程序?
【问题讨论】:
-
我也尝试过将跨域脚本源放在
ApplicationContentUriRules中,但没有成功。
标签: javascript html windows-8.1 winjs windows-phone-8.1