找不到变量:Safari上的Promise
我有一个我正在开发的网站,可以在Chrome桌面上完美运行(Windows 8.1和OS X Mavericks)
当我在iOS 7或Safari 7.0.2上运行它时,控制台出现错误,指出加载路径时出现错误:checkIfLoggedIn’
它在消息中指定的成员不是路由,它是一个返回promise的方法。 当我通过ember代码调试以找出出错的地方时,我发现它拒绝承诺的原因是“找不到变量:承诺”
我不能在这里发布我网站上的实际代码,所以我开始创建一个再现错误的小提琴,我能够想出这个:
http://jsfiddle.net/NQKvy/851/
这适用于桌面版Chrome(Windows 8.1和OS X Mavericks),但在iOS 7或Safari 7.0.2上会向控制台抛出以下错误:ReferenceError:找不到变量:Promise’
任何人都有任何想法为什么这不起作用?
回顾一下:
- 我已经在Chrome for Windows 8.1和OS X Mavericks上进行了测试 – 它有效
- 我已经在Chrome for iOS上进行了测试,但它无效
- 我已经在Safari for iOS和OS X Mavericks上测试过它并没有用
- 我根本没有在Android上测试过(我此时无法访问任何设备)
这让我相信这是一个Safari错误(如果我没记错的话)Chrome for iOS使用Safari控件来呈现页面而不是Chromium
这是我用来生成错误的代码:
App.ready = function() { var asdf = new Promise(function (resolve) { var i = 1; i++; resolve.call(this,i); }).then(function (result) { alert('I: ' + result); }); };
事实certificate,在Safari上,您必须在创建承诺时使用完全限定名称,否则它将无法工作:
App.ready = function() { var asdf = new Ember.RSVP.Promise(function (resolve) { var i = 1; i++; resolve.call(this,i); }).then(function (result) { alert('I: ' + result); }); };
注意’new Ember.RSVP.Promise’而不是’new Promise’。 这似乎为我解决了。
据此,iOS Safari 7.1或Safari 7没有承诺。
但是,他们将在iOS Safari 8和Safari 8中获取它们。
- UIWebView – 使用链接的资源加载本地.html文件
- requestFileSystem不会在iOS上触发任何callback
- 使用-webkit溢出滚动时的当前滚动位置:touch – Safari iOS JavaScript事件(scrollTop / scrollLeft)
- Phonegap – 在Apple地图应用程序中打开导航指示
- youtube iframe播放器不会自动在低带宽的移动质量切换
- 项目中缺lessmain.jsbundle,Foundation和Security,导致错误
- FBSDK:无法读取属性loginwithreadpermissions的undefined
- 如何在iOS UIWebView中获取网页的所有<img src>?
- 如何使用Expo在真实的iOS设备上运行应用程序?