2014-06-12 18 views
3

我試圖將現有的Web應用程序移植到Windows Phone 8.1(及更高版本,到Windows 8.1)。這不是靜態內容,這是一個具有客戶端功能負載的動態頁面。如何在WinJS iframe中加載遠程內容,同時避免SEC7117錯誤?

我的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 Platform API(例如HTML5 GeoLocation)停止工作,並且Microsoft自己的指導似乎將MSWebView用於靜態內容。

出於安全考慮,我真的寧願我的web應用程序在「web上下文」中執行,並使用postMessage來執行類似應用程序的活動(這部分工作正常)。通過像這樣直接從主機獲取內容,我可以更新這部分Windows Phone應用程序,而無需通過市場推送更新。

有什麼我失蹤了嗎?我是否使用了錯誤的元素?其他人如何爲Windows Phone 8.1包裝現有的Web應用程序?

+0

我也嘗試將交叉來源腳本源放在ApplicationContentUriRules中,但沒有成功。 – jokeyrhyme

回答

1

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

Features and restrictions by context該表列出了在Web上下文中禁用跨域XHR請求(根據Developing secure apps「iframe加載的遠程Web內容始終加載到Web上下文中」)。

如果您是通過XHR加載內容,您將被阻止。

您可以調查方法,使用postMessage在本地上下文中獲取數據,然後將其傳遞迴Web上下文。