2017-01-09 5 views
9

У меня есть приложение Cordova, разработанное с использованием Ionic framework, которое хорошо работало на iOS, но на iOS 10 это не так. Когда я запускаю приложение в симуляторе, ничего не работает с Угловыми (привязки, события и т. Д.). Вот скриншот.угловой/ионный не работает на iOS 10

enter image description here

Если я придаю инструменты разработчика с Safari я ничего не вижу в консоли. Однако, если я нажму кнопку «Обновить», и страница индекса будет перезагружена, все начнет работать правильно.

Я подозреваю, что это связано с политикой безопасности контента на прошивкой 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 *"> 

Я пробовал различные предложения, связанные с подобными проблемами другие столкнулись, но ничего помощника. Любое предложение оценено.

+0

Вы можете попробовать заменить тег '' на это ''? –

+0

Кроме того, я полагаю, что вы поместили свой код в '$ ionicPlatform.ready()' функцию. –

+0

Я изменил метатег, как вы предполагали, но не помогло. Мой код запускается в блоке 'run' модуля. Никаких изменений, если я перейду к '$ ionicPlatform.ready()' внутри, вызванному из 'run'. Но это то, что очень хорошо работало в предыдущих версиях 8 и 9. –

ответ

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

Итак, это бросило исключение и остановило приложение от bootstraping – maurycy

+0

Да, поэтому вы были правы в проблеме с загрузкой. –

3

Я очень ценю ваш ответ, спасибо, что поделились своим ответом в ответ. У меня также была проблема с ionic2. Только на белом экране. После многих поисков и головной боли я добавил некоторые изменения, такие как добавление разрыва и т. Д. Затем у меня появилось несколько баллов за получение ионной сборки в ios 10:

  • CSP meta tags. Удалите их, если они вызывают проблемы. Ошибки в вашем коде.
  • Откройте средства разработки сафари и осмотрите устройство. Обязательно удалите cmd-r, чтобы перезагрузить приложение. Кажется, что Safari пропускает любые журналы ошибок/консолей, которые произошли до того, как инструменты разработчика открыты.
  • Ионные 2 проекта. Убедитесь, что вы построили put для ошибок Typcript. Возможно, вам не хватает типов для сторонних модулей.
  • Наполните свой код. Запустите свой код через linter. Там могут быть ошибки, которые вы просто не видите. ЛИНТЕР сможет их поймать. Проекты V2 shoul используют правила tslint от ionic, а проекты V1 могут использовать eslint.

Также убедитесь, что вы все смотрите на эти параметры. Такая ошибка часто является причиной одной небольшой ошибки в вашем коде. Вам необходимо отладить и предоставить правильную информацию. Благодарю.

+0

Человек, CMD-R просто спас меня - я понятия не имел, что команда существует. По-видимому, некоторые из моих плагинов cordova не загружались, но я понятия не имел, потому что это первые ошибки, которые нужно выбросить, прежде чем я смогу открыть консоль dev. Спасибо!! –