我需要对我的应用进行一些更改,但只限于iPhone X。
该应用程序基于Apache Cordova(使用Ionic框架)。
是否有一个 Cordova插件 可以检测到iPhone X?如果答案是否定的,那么在javascript中了解用户是否拥有iPhone X的最佳方法是什么?
谢谢
我需要对我的应用进行一些更改,但只限于iPhone X。
该应用程序基于Apache Cordova(使用Ionic框架)。
是否有一个 Cordova插件 可以检测到iPhone X?如果答案是否定的,那么在javascript中了解用户是否拥有iPhone X的最佳方法是什么?
谢谢
检查:var deviceInformation = ionic.Platform.device();
/**
* @ngdoc method
* @name ionic.Platform#device
* @description Return the current device (given by cordova).
* @returns {object} The device object.
*/
device: function() {
return window.device || {};
},
属性
device.cordova // returns CDV_VERSION
device.model
device.platform // always returns iOS
device.uuid
device.version
device.manufacturer // always returns Apple
device.isVirtual // not relevant
device.serial
UIDevice
。如果你仍然无法获取 iPhone X
,需要找到在 Obj-C 中检测它并更改 CDVDevice.m
的方法。
还可以查看这个常见问题解答:iOS设备返回不同格式的设备型号,为什么?
device.model
返回的是 "iPhone X" 吗? - johnborgesx86
或 x86_64
。 - Maxim ShoustiniPhoneX
- Maxim Shoustin使用cordova-plugin-device插件,如下所示:
window.device.model
将会得到:
iPhone10,3
或 iPhone10,6
请参阅文档:
请查看这个评论
const isIphoneX = () => {
try {
const iphoneModel = window.device.model;
const m = iphoneModel.match(/iPhone(\d+),?(\d+)?/);
const model = +m[1];
if (model >= 10) { // is iphone X
return true;
}
} catch (e) { }
return false;
}
**编辑**
我认为我正在使用cordova-plugin-device
,因为我的项目不是ionic应用程序。我重新编写了正则表达式,以便它也可以与ionic.Platform.device().model
一起使用。
const model = +m[0];
吗? - AlexisCaffa0
索引中,因此我使用 1
索引来表示第一个反向引用(即在括号中的内容)。 - Jacksonkr我使用内置的ionic.Platform.device()方法进行了以下操作。如果您已经在使用ionic,我认为不必安装一个全新的插件。
let model = ionic.Platform.device().model
$scope.deviceIphonex = model.includes('iPhone10')
我可以在我的应用程序中任何位置使用它,并为iPhone X执行特定的操作。
修正 @Jacksonkr 的答案,感谢 @Made in Moon 提供关于 iPhone10.3 和 iPhone10.6 型号的信息。您可以使用此方法获取 iPhone X 及以上设备。
export default () => {
try {
const exceptions = ['iPhone10,3', 'iPhone10,6'];
const iphoneModel = Device.model;
const m = iphoneModel.match(/iPhone(\d+),?(\d+)?/);
const model = +m[1];
if (model >= 11) {
// is iphone X
return true;
} else if (model === 10) {
// iPhone10,3 = iPhone X
// iPhone10,4 = iPhone 8
// iPhone10,5 = iPhone 8 Plus
// iPhone10,6 = iPhone Xs
return exceptions.includes(iphoneModel);
}
} catch (e) {
console.log(e);
}
return false;
};