Cordova网址和图片src在Windows中的网页上有“不安全”

时间:2016-06-10 12:22:41

标签: angularjs cordova windows-10

我正在使用Angular开发一个Cordova应用程序,而且我正在为Windows开发一些东西。

我正在尝试这样的事情:

<img ng-src="{{dataDirectory + buildingPhoto.FilenamePhoto}}" class="full-width">

dataDirectory =“ms-appdata:/// local”
buildingPhoto.FilenamePhoto =“VOL-00122kaftfoto_thumb.png”

但这只会导致使用此代码破坏图像:

<img class="full-width" src="unsafe:ms-appdata:///local/VOL-00122kaftfoto_thumb.png" ng-src="ms-appdata:///local/VOL-00122kaftfoto_thumb.png">

我认为unsafe表示前缀被视为不安全且需要列入白名单,因此我在app.js添加了此内容:

.config(['$compileProvider', function($compileProvider) {

    $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|ghttps?|ms-appx|ms-appdata|x-wmapp0):/);
    $compileProvider.imgSrcSanitizationWhitelist(/^\s*(https?|ftp|file|ms-appx|ms-appdata|x-wmapp0):|data:image\//);
}])

我还在index.html中添加了这个元标记:

<meta http-equiv="Content-Security-Policy" content="ms-appdata *; default-src *; img-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'" />

但它不起作用,所以我有点卡在这里,希望有人能把我推向正确的方向。

3 个答案:

答案 0 :(得分:6)

使用以下代码进行图像src白名单修复了该问题:

var query = NhSession.Query<ServiceContract>()
                .Where(s => s.ObjectOfficer.Manager.FirstName == owner.FirstName 
                            && s.ObjectOfficer.Manager.LastName == owner.LastName);
contracts = query.ToList();

同时确保$ appProvider在app.js 中的初始设置后不会被其他任何地方覆盖,这实际上导致了Joris的问题。

答案 1 :(得分:2)

经过几天的搜索,我终于找到了解决问题的方法 我所做的一切都是正确的。唯一的问题是我在我的app.js中应用了所有这些,而在我的router.js中,所有内容都被不同的代码覆盖了。

课程:在应用补丁之前,请始终检查角度应用程序是否在其他文件中具有配置

答案 2 :(得分:1)

这是最好的解决方案。

myApp.config(['$compileProvider', function ($compileProvider) {
    $compileProvider.imgSrcSanitizationWhitelist(/^\s*(https?|ftp|file|chrome-extension|ms-appx-web|ms-appx):|data:image\//);
    $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|chrome-extension|ms-appx-web|ms-appx):/);
}]);