我正在尝试将现有的网络应用移植到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应用程序的这一部分,而无需通过市场推送更新。
有什么我想念的吗?我使用了错误的元素吗?其他人如何为Windows Phone 8.1包装现有的Web应用程序?
答案 0 :(得分:1)
这很可能是由iframe安全模型引起的。
在Features and restrictions by context,该表将跨域XHR请求列为在Web上下文中被禁用(根据Developing secure apps&#34; iframe加载的远程Web内容始终在网络环境&#34;)。
如果您通过XHR加载内容,则会被阻止。
您可以调查方法,使用postMessage在Local上下文中获取数据,然后将其传递回Web上下文。