我有一个使用Ionic框架开发的Cordova应用程序,该应用程序过去在iOS上运行良好,但在iOS 10上却无法运行。当我在模拟器中启动应用程序时,没有Angular特定的工作(绑定,事件等)。这是屏幕截图。
如果从Safari连接开发人员工具,则控制台中将看不到任何内容。但是,如果按“刷新”按钮,并且重新加载了索引页面,则一切将开始正常工作。
我怀疑这与iOS 10上的内容安全策略有关。我的Content-Security-Policy元标记如下所示:
<meta http-equiv="Content-Security-Policy"
content="default-src 'self' data: gap: file://* * 'unsafe-eval';
script-src 'self' 'unsafe-inline' 'unsafe-eval' *;
style-src 'self' 'unsafe-inline' *;
media-src *">
我尝试了各种建议,这些建议与其他人遇到的类似问题有关,但没有任何帮助。任何建议,不胜感激。
我可以正常工作了,问题出在使用Google Analytics(分析)的工厂。代码(部分)如下所示:
(function () {
'use strict';
angular
.module('appname.factories')
.factory("analyticsFactory", [
function () {
var trackInitialize = function () {
if (typeof analytics !== undefined) {
analytics.startTrackerWithId("...");
}
else {
console.log("Google Analytics Unavailable");
}
};
return {
trackInitialize: trackInitialize
}
}]);
}());
这是从模块的run
块中调用的,analytics
不可用。解决方法是将其传递$window
给工厂以供使用analytics
。
(function () {
'use strict';
angular
.module('appname.factories')
.factory("analyticsFactory", [
'$window',
function ($window) {
var emptyFn;
emptyFn = function () { };
emptyFn['mocked'] = true;
var analytics = $window && $window['analytics'] ? $window['analytics'] : {
startTrackerWithId: emptyFn,
trackView: emptyFn,
trackEvent: emptyFn,
trackException: emptyFn,
};
analytics.trackInitialize = function () {
analytics.startTrackerWithId("...");
if (analytics['mocked'])
console.log("Google Analytics Unavailable");
};
return analytics;
}]);
}());
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句