我有一个 jQuery 脚本,它在 Safari 10 中给出了这个控制台错误:
TypeError: undefined is not an object (evaluating 'iOSversion()')
这在 Chrome 中:
Uncaught TypeError: Cannot read property '0' of undefined
这是有问题的脚本(简化):
$(document).ready(function() {
//detect iOS version
function iOSversion() {
if (/iP(hone|od|ad)/.test(navigator.platform)) {
// supports iOS 2.0 and later
var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);
return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];
}
}
// this causes a console error
var ver = iOSversion();
if (ver[0] < 10) {
alert('this is version 9 or below');
}
if (ver[0] >= 10) {
alert('this is version 10 or above');
}
});
问题:我是 JavaScript 的相对初学者,正在努力理解问题的原因是什么(因为变量似乎已正确定义?),我不知道 [0] 错误!)。有人可以帮助我了解出了什么问题以及如何解决吗?
(发生这种情况的页面在这里)
你的函数只会在 iOS 平台上返回一些东西,所以如果你在 Chrome 或 Safari (macOS) 上测试你会得到一个错误。ver
是undefined
,因此没有[0]
密钥。
一个快速的解决办法是让函数返回一些在所有平台上都有效的东西。就像是:
function iOSversion() {
if (/iP(hone|od|ad)/.test(navigator.platform)) {
// supports iOS 2.0 and later
var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);
return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];
}
return [0]; // Return '0' by default
}
也许更好的解决方案(取决于您的确切问题)是不进行操作系统检测,而是进行功能检测。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句