我試圖將現有的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應用程序?
我也嘗試將交叉來源腳本源放在ApplicationContentUriRules中,但沒有成功。 – jokeyrhyme