角度/离子在iOS 10上不起作用

时间:2017-01-09 10:13:12

标签: javascript ios angularjs cordova ionic-framework

我有一个使用Ionic框架开发的Cordova应用程序曾经在iOS上运行良好,但在iOS 10上却没有。当我在模拟器中启动应用程序时,没有Angular特定的工作(绑定,事件等)。这是一个截图。

enter image description here

如果我从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 *">

我已尝试过与其他人面临的类似问题相关的各种建议,但没有任何帮助。任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:5)

我有这个工作,问题是使用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;
         }]);
}());

答案 1 :(得分:3)

我非常感谢您的回答,感谢您分享您的回答作为回复。我使用ionic2也遇到了同样的问题。只有白色屏幕显示。经过大量的搜索和头痛之后,我添加了一些变化,例如添加间隙等。然后我在ios 10中得到了离子构建的几点:

  • CSP元标记。如果它们导致问题,请删除它们 代码中的错误。
  • 打开safari开发工具并检查设备。确保点击cmd-r重新加载应用程序。 Safari似乎错过了开放工具打开之前发生的任何错误/控制台日志。
  • Ionic 2项目。检查你为Typescript错误构建了put。您可能缺少第三方模块的类型。
  • 提示你的代码。通过linter运行你的代码。可能存在您没有看到的错误。一个短绒将能够抓住这些。 V2项目应该使用离子的tslint规则,V1项目可以使用eslint。

还要确保大家都看看这些选项。这种错误通常是代码中出现一个小错误的原因。您需要调试并提供正确的信息。感谢。