【发布时间】:2014-03-17 18:26:52
【问题描述】:
我正在开发一个在 Chrome 桌面版(Windows 8.1 和 OS X Mavericks)上完美运行的网站
当我在 iOS 7 或 Safari 7.0.2 上运行它时,控制台出现错误提示
加载路由时出错:checkIfLoggedIn
它在消息中指定的成员不是路由,而是返回承诺的方法。当我通过 ember 代码调试以找出问题所在时,我发现它拒绝了承诺,原因是
找不到变量:Promise
我无法在此处发布我网站上的实际代码,因此我开始创建一个重现错误的小提琴,并且我能够想出这个:
http://jsfiddle.net/NQKvy/851/
这可以在桌面版 Chrome 上完美运行(Windows 8.1 和 OS X Mavericks),但在 iOS 7 或 Safari 7.0.2 上会向控制台抛出以下错误
ReferenceError: 找不到变量:Promise
有人知道为什么这不起作用吗?
回顾一下:
- 我已在适用于 Windows 8.1 和 OS X Mavericks 的 Chrome 上进行了测试 - 它可以正常工作
- 我在 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);
});
};
【问题讨论】:
-
嗯,我只是将代码更改为使用完全限定名称:new Ember.RSVP.Promise(...) 并且它似乎可以在我的 macbook 上的 Safari 中修复它......这很糟糕Ember 网站上的文档没有使用完全限定名称
-
实际上很疯狂。感谢您发布解决方案
-
我自己遇到了这个问题,试图弄清楚究竟是什么导致了这种行为。您使用的是
ember-cli还是只使用ember? -
我自己用的是ember
标签: javascript ios ember.js safari