我有一个网站可以在桌面版 Chrome 上完美运行(Windows 8.1 和 OS X Mavericks)
当我在 iOS 7 或 Safari 7.0.2 上运行它时,我在控制台上收到一条错误消息
Error while loading route: checkIfLoggedIn
它在消息中指定的成员不是路由,它是一个返回 promise 的方法。当我调试 ember 代码以找出问题所在时,我发现它拒绝了 promise,原因是
Can't find variable: Promise
我无法在此处发布我网站上的实际代码,因此我着手创建一个可以重现错误的 fiddle ,然后我想出了这个:
http://jsfiddle.net/NQKvy/851/
这在桌面版 Chrome(Windows 8.1 和 OS X Mavericks)上运行完美,但在 iOS 7 或 Safari 7.0.2 上会向控制台抛出以下错误
ReferenceError: Can't find variable: Promise
有人知道为什么这不起作用吗?
回顾一下:
- 我已经在适用于 Windows 8.1 和 OS X Mavericks 的 Chrome 上进行了测试 - 它有效
- 我已经在 iOS 版 Chrome 上进行了测试,但它无法正常工作
- 我已经在适用于 iOS 和 OS X Mavericks 的 Safari 上进行了测试,但它不起作用
- 我根本没有在 Android 上进行过测试(目前我无法访问任何设备)
这让我相信这是一个 Safari 错误,因为(如果我没记错的话)iOS 版 Chrome 使用 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);
});
};
最佳答案
事实证明,在 Safari 上,您必须在创建 promise 时使用完全限定名称,否则它将无法工作:
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”。这似乎为我解决了这个问题。
关于javascript - 找不到变量 : Promise on Safari,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22462396/