如何在WinJS iframe中加载远程内容,同时避免SEC7117错误?

时间:2014-06-12 01:49:13

标签: javascript html5 windows-8.1 winjs windows-phone-8.1

我正在尝试将现有的网络应用移植到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应用程序?

1 个答案:

答案 0 :(得分:1)

这很可能是由iframe安全模型引起的。

Features and restrictions by context,该表将跨域XHR请求列为在Web上下文中被禁用(根据Developing secure apps&#34; iframe加载的远程Web内容始终在网络环境&#34;)。

如果您通过XHR加载内容,则会被阻止。

您可以调查方法,使用postMessage在Local上下文中获取数据,然后将其传递回Web上下文。