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

标签 javascript html windows-8.1 winjs windows-phone-8.1

我正在尝试将现有的 Web 应用程序移植到 Windows Phone 8.1(以及更高版本的 Windows 8.1)。这不是静态内容,这是一个具有大量客户端功能的动态页面。

我的 default.html文件有 <iframe src="https://remote.example.com/app.html"></iframe> .

iframe 中的内容在模拟器中有效,并且在初始 HTML 中直接引用的资源似乎有效。但是,我的网络应用程序却触发了几个这样的错误:

SEC7117: Network request to https://cdn.remote.example.com/extra.js did not succeed. Your application manifest does not declare the following capabilities: 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 包装现有的网络应用程序?

最佳答案

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

Features and restrictions by context该表列出了在 Web 上下文中禁用的跨域 XHR 请求(根据 Developing secure apps “由 iframe 加载的远程 Web 内容始终在 Web 上下文中加载”)。

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

您可以研究方法,使用 postMessage 在本地上下文中获取数据,然后将其传回 Web 上下文。

关于javascript - 如何在 WinJS iframe 中加载远程内容同时避免 SEC7117 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24175312/

相关文章:

javascript - 从外部函数访问 $http 数据

javascript - 我可以捕获一个类的提交事件吗

javascript - qTip2 触发隐藏事件时删除 html 内容

html - 使用 bootstrap 将响应图像对齐到 div 的底部

visual-c++ - Qt Creator 2.8.1 + MSVC 2013 Express = 没有编译器可以为此 Qt 版本生成代码

windows-runtime - ListView 重新排序是否在 Windows 10 RT 应用程序上停止工作?

javascript - ES6 中的 polymer 事件监听器

javascript - Mocha 'before each hook' 消息为红色。我怎么知 Prop 体出了什么问题?

javascript - 获取 slider 以更新 HTML Canvas

java - 为什么我的 AWT/swing GUI JAR 仅捕获 Windows 8.1 平板电脑屏幕特定区域中的触笔事件数据?