ios9下ionic框架报[$rootScope:infdig] 10 $digest() iterations reached. Aborting!的解决办法

升级ios9后,ionic开发的app会报[$rootScope:infdig] 10 $digest() iterations reached. Aborting!的错误,加上一个patch就可以解决

在index.html里引入js
<script type="text/javascript" src="js/angular-ios9-uiwebview.patch.js"></script>

app.js里加入dependency ‘ngIOS9UIWebViewPatch‘
angular.module(‘starter‘, [‘ionic‘, ‘starter.controllers‘, ‘starter.services‘, ‘ngIOS9UIWebViewPatch‘])

js/angular-ios9-uiwebview.patch.js的下载地址:
https://gist.github.com/IgorMinar/863acd413e3925bf282c

-----------------------------------------------------------------------------------------------
作者blog:
http://blog.ionic.io/ios-9-potential-breaking-change/
作者blog全文:

iOS 9 Potential Breaking Change

Tweet

By Max on September 10, 2015

Update (9/11/2015): A new version of the patch was released by Igor on the Angular team that fixes many issues. Please use it: angular-ios9-uiwebview.patch.js. Make sure to add ‘ngIOS9UIWebViewPatch‘ to your angular modules and use version 1.1.0 or higher of the patch. Also, see our latest postabout other issues that need addressing.

A breaking change was introduced into UIWebView for iOS 9 that could cause issues for apps that heavily rely on the semantics of window.location.

We’ve tested a number of widely-used Ionic apps with iOS 9 beta and GM, and issues appear to be isolated to intermittent UI/navigation issues on some apps, along with console errors indicating infinite digest warnings in Angular. Functionality beyond that should not be impacted.

We are still investigating the impact of this change and working with the Angular team to develop a long-term fix. In the meantime, we’ve (the Angular team has) created a patch to stop the digest issue which was causing the console errors. This hot fix can be included in the majority of Ionic and Angular apps (even those running alpha/beta/rc) releases. If you rely on the semantics of window.location or use the $location service heavily, and have noticed issues on iOS 9 GM please try the patch and let us know how it works for you.

If you do notice an issue with your app in iOS 9, add the patch, and submit your apps for review. There is an openradar issue for this that you might be able to reference to expedite an update (of course, no guarantees). There is supposedly a fix in the works from Apple, but it wasn’t released in time for GM.

Thanks to everyone that has helped us with this issue. If this issue has caused an issue in your app, please let us know (and we are sincerely sorry) as we work towards a permanent fix.

---------------------------------------------------------------------------------------------
---js/angular-ios9-uiwebview.patch.js----------------------------------------------------------------------

/**
* ================== angular-ios9-uiwebview.patch.js v1.1.1 ==================
*
* This patch works around iOS9 UIWebView regression that causes infinite digest
* errors in Angular.
*
* The patch can be applied to Angular 1.2.0 – 1.4.5. Newer versions of Angular
* have the workaround baked in.
*
* To apply this patch load/bundle this file with your application and add a
* dependency on the "ngIOS9UIWebViewPatch" module to your main app module.
*
* For example:
*
* ```
* angular.module(‘myApp‘, [‘ngRoute‘])`
* ```
*
* becomes
*
* ```
* angular.module(‘myApp‘, [‘ngRoute‘, ‘ngIOS9UIWebViewPatch‘])
* ```
*
*
* More info:
* - https://openradar.appspot.com/22186109
* - https://github.com/angular/angular.js/issues/12241
* - https://github.com/driftyco/ionic/issues/4082
*
*
* @license AngularJS
* (c) 2010-2015 Google, Inc. http://angularjs.org
* License: MIT
*/

angular.module(‘ngIOS9UIWebViewPatch‘, [‘ng‘]).config([‘$provide‘, function($provide) {
‘use strict‘;

$provide.decorator(‘$browser‘, [‘$delegate‘, ‘$window‘, function($delegate, $window) {

if (isIOS9UIWebView($window.navigator.userAgent)) {
return applyIOS9Shim($delegate);
}

return $delegate;

function isIOS9UIWebView(userAgent) {
return /(iPhone|iPad|iPod).* OS 9_\d/.test(userAgent) && !/Version\/9\./.test(userAgent);
}

function applyIOS9Shim(browser) {
var pendingLocationUrl = null;
var originalUrlFn= browser.url;

browser.url = function() {
if (arguments.length) {
pendingLocationUrl = arguments[0];
return originalUrlFn.apply(browser, arguments);
}

return pendingLocationUrl || originalUrlFn.apply(browser, arguments);
};

window.addEventListener(‘popstate‘, clearPendingLocationUrl, false);
window.addEventListener(‘hashchange‘, clearPendingLocationUrl, false);

function clearPendingLocationUrl() {
pendingLocationUrl = null;
}

return browser;
}
}]);
}]);

时间: 2024-11-05 20:45:37

ios9下ionic框架报[$rootScope:infdig] 10 $digest() iterations reached. Aborting!的解决办法的相关文章

32位win7系统下配置IIS遇到php-cgi.exe - FastCGI 进程意外退出问题的解决办法

今天重装了一下系统,是32位的WIN7,装完系统后想把IIS装回来,因为有时候需要用到笔记本处理一些事情,结果WEB服务器正常了,但IIS的FASTCGI模块始终不能解析PHP,一直报php-cgi.exe - FastCGI 进程意外退出的错误,于是上网找了一下解决办法,将解决过程写下来,以备忘: 解决的思路很简单,既然是不能解析PHP,那就直接运行一下PHP,看会报什么错,再对症下药,于是,在命令提示符窗口进入php安装的根目录,然后运行php -v的命令,这时窗口弹出计算机丢失msvcr1

IE6,IE7,IE8下报JS错误:expected identifier, string or number的原因及解决办法

今天在调试一个页面的时候遇到一个问题,在IE9下运行得很好的脚本,在IE8里打开的时候弹出错误:expected identifier, string or number,按照经验,应该是定义对象的时候最后一个属性末尾跟了逗号,但检查一遍后没发现有这种情况,后来仔细看了一下报错的位置,发现有定义json对象属性时,属性名没有用引号括起来,于是加了上去再试,问题解决了. 综上所述,当出现expected identifier, string or number的错误时,你首先应该检查在使用对象字面

centos 下安装jdk、tomcat 以及tomcat无法从外部访问的解决办法

centos 下安装jdk.tomcat 以及tomcat无法从外部访问的解决办法 原创 2014年08月28日 10:24:33 标签: selinux enforce cent 2223 昨天在centos下安装了jdk和tomcat,并调试通,之前从Ubuntu下装过,还没有从centos弄过,记录一下安装过程与出现的问题. 首先准备好安装文件,jdk-6u45-linux-i586-rpm.bin  apache-tomcat-6.0.41.tar.gz 进入目录 [html] view

MacBook Pro/Air 下使用 linux ubuntu 系统 波浪号“~”变成其他 符号 的完美解决办法

打开终端,输入: sudo su - echo 0 > /sys/module/hid_apple/parameters/iso_layout sudo su -需要root权限,所以使用前请注意已下载root,没有root的请输入以下代码: #没有root的请输入以下代码下载root sudo apt-get install root 这时你会发现“~”能打出来了,但是重启系统又会恢复原样,所以我们要在下面 rc.local 文件中添加一行代码: 路径:/etc/rc.local sudo v

liunx系统环境下,爆出该错误&quot;org.eclipse.wst.validation&quot; has been removed解决办法

导出maven工程遇到的问题,"org.eclipse.wst.validation" has been removed,还以为是工程本身的问题,后来发现是eclipse的问题. 解决办法:你项目的存放文件夹(工作空间)下的隐藏文件.metadata 把D:\kaola\kaolaWorkSpace\.metadata\.plugins\org.eclipse.core.runtime\.settings 下的org.eclipse.wst.validation.prefs 删除就可以

windows下Mysql免安装版,修改my_default.ini配置文件无效的解决办法

Windows操作系统中,当我们在安装Mysql数据库服务器的时候,通常有两个选择:一是去官方网站下载Mysql -installer.exe,利用windows系统安装程序的方法按部就班的来安装:二是去软件社区下载mysql绿色免安装版,解压出来就能立即使用. 以上两种方式都可以顺利在电脑上装好Mysql服务器,然而有的用户使用免安装版时,没有通过正确的配置来启动mysql服务器,会出现的问题是 当我们想修改数据库的配置信息如 wait_timeout.interactive_timeout.

Linux下U盘内容为只读文件不能存储其他内容的解决办法

不知道什么情况最近u盘出现问题了,打开u盘后所有的文件上面都有了个上锁的标志,刚开始没太在意,然后想要继续在u盘中存东西时才发现根本存不进去,百度之后才知道是此时u盘内容都是只读文件,那要怎么解决这个问题呢?看了好多人的描述之后,有人说换u盘吧,有的说是格式化u盘,可是u盘中的文件很多,这样子的话总是感觉有点不妥,不过在我的坚持下终于发现了一个好办法来解决此问题. 将u盘插入Linux系统下,直接挂载了.然而u盘内文件都是只读文件,修改权限也不能改. 解决方法如下: (1).在插入u盘之前,先执

经验分享-关于在linux下删除大文件后,磁盘空间没有得到释放的解决办法

这个博客很早就注册啦,但是一直没有更新,最近辞职闭关清修,争取每天写一篇技术博客-- 闲话不多说,直接开始切入正题啦- 事情发生在2014年的4月份,人生中的第一次跳槽,成功的入职一家刚刚起步的 CDN的公司,做了一名不称职的研发运维,当时正好赶上前任运维离职,最开始公司之前用的是多squid,由于公司现在的团队中对squid比较了解的人都走光了,在加上多squid有一个严重的弊端,就是本机多个squid进程之间缓存的内容是无法共享的,有的时候同一个文件则会被缓存多分,十分浪费磁盘空间,由于本机

VirtualBox 下USB 设备加载的步骤及无法加载的解决办法

1. 将u盘插入电脑,在windows能够识别后,进入VirtualBox的选定要加载的虚拟机,选择设置——>选择usb设备项 2. 选择右边的第一或者是第二个图标,增加一个新的筛选器,第一个图标是增加一个空的筛选器,能够加载任何的usb设备.第二图标是加载host中usb列表的设备. 3. 增加筛选器后,通过windows的安全删除硬件方式卸载usb. 4. 启动 guest,进入ubuntu,此时应该会提示windows发现了virtual box usb驱动,指定驱动为virtual bo