我有一个我正在开发的网站,它可以在Chrome桌面上完美运行(Windows 8.1&OS X Mavericks)
当我在iOS 7或Safari 7.0.2上运行它时,控制台出现错误
加载路由时出错:checkIfLoggedIn
它在消息中指定的成员不是路由,而是返回承诺的方法。当我通过ember代码进行调试以找出出了什么问题时,我发现它拒绝了promise,原因是
找不到变量:Promise
我无法在这里发布我的网站上的实际代码,所以我开始创建一个复制错误的提琴,我想出了这个:
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上进行了测试,但它不起作用
- 我已经在iOS和OS X Mavericks的Safari上进行了测试,但它不起作用
- 我根本没有在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);
});
};
2条答案
按热度按时间fquxozlt1#
事实证明,在Safari上,创建承诺时必须使用完全限定的名称,否则它将无法工作:
请注意“新Ember.RSVP”。承诺”而不是“新承诺”。这似乎为我解决了问题。
hjzp0vay2#
根据this,iOS Safari 7.1或Safari 7没有任何承诺。
然而,他们将在iOS Safari 8和Safari 8。