如何确定javascript代码在哪个iPhone版本上运行?
需要区分iPhone3x和iPhone4x。有什么方法可以从JavaScript中找出版本吗?您可以使用如何确定javascript代码在哪个iPhone版本上运行?,javascript,mobile,mobile-safari,Javascript,Mobile,Mobile Safari,需要区分iPhone3x和iPhone4x。有什么方法可以从JavaScript中找出版本吗?您可以使用navigator.userAgent检查操作系统版本,但这并不是真正的问题 您可以使用媒体查询来检查设备的实际屏幕分辨率,这可能是当前问题的原因 var isRetina = window.matchMedia("(-webkit-min-device-pixel-ratio: 2)").matches; 您也可以不使用JavaScript,通过使用媒体查询加载视网膜显示的不同样式表: &
navigator.userAgent
检查操作系统版本,但这并不是真正的问题
您可以使用媒体查询来检查设备的实际屏幕分辨率,这可能是当前问题的原因
var isRetina = window.matchMedia("(-webkit-min-device-pixel-ratio: 2)").matches;
您也可以不使用JavaScript,通过使用媒体查询加载视网膜显示的不同样式表:
<link rel="stylesheet" href="retina.css"
media="only screen and (-webkit-min-device-pixel-ratio: 2)" />
也许您可以通过在query
navigator.appVersion.indexOf(“…”)中获取操作系统版本来检查它
iphone3G有苹果iOS 4.2.1
iphone4和4S有苹果iOS 5.0.1,但iphone3GS有同样的功能
作为变体,您可以通过使用大循环来提供cpu速度测试。例如,for(var i=0,k=1;i我不久前遇到了类似的问题。在一个通过javascript加载了大量视频的客户端网站上工作时,我发现他们需要使用的视频格式具有奇怪的帧速率,这在iPhone 3GS上不起作用
按照atornblad的方法,我得到了完全符合我需要的解决方案:
if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i))) {
if (!(window.devicePixelRatio > 1)){
//non retina iphone / ipod
}
};
首先,它检查用户是从iPod还是iPhone来找我。然后,它检查视网膜支持。因为只有iPhone 4+支持它,所以我设法为旧设备调用了正确的视频文件。关于更多CPU速度测量方法的一些信息:它们可能是“不合适的”“这是一种方法,但在某些情况下,了解目标设备的计算能力可能会很有用
因此,我想在这些方法中添加以下内容:与其计算固定值并测量时间,不如计算固定时间,然后比较得出的值。
如果你的用户访问你的设备速度慢得多,可能是因为它在模拟器中运行,他将不得不等到你数到n。如果你在200毫秒后离开循环,你将只会达到一个非常低的值,用户体验不会受到影响
此外,知道一个操作需要多长时间总是很好的,它减少了不确定性。这将是Javascript中两种方法的组合:
函数iPhoneVersion(){
var iHeight=window.screen.height;
var iWidth=window.screen.width;
如果(iWidth==414&&iHeight==896){
返回“Xmax Xr”;
}
else if(iWidth==375&&iHeight==812){
返回“X-Xs”;
}
else if(iWidth==320&&iHeight==480){
返回“4”;
}
else if(iWidth==375&&iHeight==667){
返回“6”;
}
else if(iWidth==414&&iHeight==736){
返回“6+”;
}
else if(iWidth==320&&iHeight==568){
返回“5”;
}
否则,如果(iHeight通过使用WEBGL_debug_renderer_info扩展(它是的一部分),您可以检索GPU的供应商和渲染器名称
将这与设备的屏幕尺寸相结合,您可以准确地定义它的版本。下面的代码示例显示了如何对所有iPhone版本(包括3和4)执行此操作
// iPhone model checks.
function getiPhoneModel() {
// Create a canvas element which can be used to retrieve information about the GPU.
var canvas = document.createElement("canvas");
if (canvas) {
var context = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
if (context) {
var info = context.getExtension("WEBGL_debug_renderer_info");
if (info) {
var renderer = context.getParameter(info.UNMASKED_RENDERER_WEBGL);
}
}
}
// iPhone X
if ((window.screen.height / window.screen.width == 812 / 375) && (window.devicePixelRatio == 3)) {
return "iPhone X";
// iPhone 6+/6s+/7+ and 8+
} else if ((window.screen.height / window.screen.width == 736 / 414) && (window.devicePixelRatio == 3)) {
switch (renderer) {
default:
return "iPhone 6 Plus, 6s Plus, 7 Plus or 8 Plus";
case "Apple A8 GPU":
return "iPhone 6 Plus";
case "Apple A9 GPU":
return "iPhone 6s Plus";
case "Apple A10 GPU":
return "iPhone 7 Plus";
case "Apple A11 GPU":
return "iPhone 8 Plus";
}
// iPhone 6+/6s+/7+ and 8+ in zoom mode
} else if ((window.screen.height / window.screen.width == 667 / 375) && (window.devicePixelRatio == 3)) {
switch(renderer) {
default:
return "iPhone 6 Plus, 6s Plus, 7 Plus or 8 Plus (display zoom)";
case "Apple A8 GPU":
return "iPhone 6 Plus (display zoom)";
case "Apple A9 GPU":
return "iPhone 6s Plus (display zoom)";
case "Apple A10 GPU":
return "iPhone 7 Plus (display zoom)";
case "Apple A11 GPU":
return "iPhone 8 Plus (display zoom)";
}
// iPhone 6/6s/7 and 8
} else if ((window.screen.height / window.screen.width == 667 / 375) && (window.devicePixelRatio == 2)) {
switch(renderer) {
default:
return "iPhone 6, 6s, 7 or 8";
case "Apple A8 GPU":
return "iPhone 6";
case "Apple A9 GPU":
return "iPhone 6s";
case "Apple A10 GPU":
return "iPhone 7";
case "Apple A11 GPU":
return "iPhone 8";
}
// iPhone 5/5C/5s/SE or 6/6s/7 and 8 in zoom mode
} else if ((window.screen.height / window.screen.width == 1.775) && (window.devicePixelRatio == 2)) {
switch(renderer) {
default:
return "iPhone 5, 5C, 5S, SE or 6, 6s, 7 and 8 (display zoom)";
case "PowerVR SGX 543":
return "iPhone 5 or 5c";
case "Apple A7 GPU":
return "iPhone 5s";
case "Apple A8 GPU":
return "iPhone 6 (display zoom)";
case "Apple A9 GPU":
return "iPhone SE or 6s (display zoom)";
case "Apple A10 GPU":
return "iPhone 7 (display zoom)";
case "Apple A11 GPU":
return "iPhone 8 (display zoom)";
}
// iPhone 4/4s
} else if ((window.screen.height / window.screen.width == 1.5) && (window.devicePixelRatio == 2)) {
switch(renderer) {
default:
return "iPhone 4 or 4s";
case "PowerVR SGX 535":
return "iPhone 4";
case "PowerVR SGX 543":
return "iPhone 4s";
}
// iPhone 1/3G/3GS
} else if ((window.screen.height / window.screen.width == 1.5) && (window.devicePixelRatio == 1)) {
switch(renderer) {
default:
return "iPhone 1, 3G or 3GS";
case "ALP0298C05":
return "iPhone 3GS";
case "S5L8900":
return "iPhone 1, 3G";
}
} else {
return "Not an iPhone";
}
}
我不希望这样做,但是存在一些不一致的地方,没有给理想主义方法留下太多空间()。不过有趣的是:在iOS4和Rhino上,matchMedia
最好不要被调用(导致了一些意外行为,没有时间进行更深入的调试).Martijn Pieters删除了这篇文章,指出重复的答案是不可接受的。仅在此处重新发布。如果用户选择“设置>显示和亮度>视图”上的缩放,则此操作无效。@trungnnh是正确的,设置“缩放”将更改window.screen.width