Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在android上检测webapp模式_Javascript_Android_Google Chrome_Web Applications - Fatal编程技术网

Javascript 在android上检测webapp模式

Javascript 在android上检测webapp模式,javascript,android,google-chrome,web-applications,Javascript,Android,Google Chrome,Web Applications,我写了这个小片段,测试一个webapp是否在浏览器的webapp模式下运行。它现在可以工作了,但我只有一个三星S4来测试它。它通过测量可用屏幕尺寸与窗口内部尺寸来实现。问题是,我在其他设备上使用的偏移量是否不同。我知道这是一个有点麻烦的测试,但它会非常感谢 function detectWebApp() { var ua = navigator.userAgent.toLowerCase(); var isAndroid = ua.indexOf("android") &g

我写了这个小片段,测试一个webapp是否在浏览器的webapp模式下运行。它现在可以工作了,但我只有一个三星S4来测试它。它通过测量可用屏幕尺寸与窗口内部尺寸来实现。问题是,我在其他设备上使用的偏移量是否不同。我知道这是一个有点麻烦的测试,但它会非常感谢

function detectWebApp() {
var ua          = navigator.userAgent.toLowerCase();
var isAndroid   = ua.indexOf("android") > -1;
var isIOS       = ua.match(/(ipad|iphone|ipod)/g);
var isChrome    = ua.indexOf("chrome") > -1;
var offset      = new Array();
var sh          = screen.availHeight;
var sw          = screen.availWidth;
var ih          = window.innerHeight;
var iw          = window.innerWidth;
var isWebApp    = false;
var debug       = false;

// for now only test for android and iOS, other mobile platforms may be included later
if(isAndroid || isIOS) {
    // yes we're on a mobile OS
    if(isIOS) {
        if(window.navigator.standalone)  isWebApp = true;
    } else {
        // it is not IOS
        if(isAndroid) {
            offset[0] = 0;      // <- not all android devices show status header
            offset[1] = 25; // <- is android status header
            offset[2] = 44; // <- is including error message ssl cert;
                                    // documentation says 25dp = status header
                                    // , up til now all devices show this in javascript as 25px.
                                    // todo check offset for other android devices
        } else {
            // for future use, if mobile platform other than iOS or android
            offset[0] = 0;
        }
        if(window.orientation==0) {
            for (var i = 0; i < offset.length; i++) {
                if(ih == (sh - offset[i])) {
                    if(debug) alert(window.orientation + ' ' + ih + '==' + sh + ' offset:' + offset[i]);
                    isWebApp = true;
                    break;
                }
            }
        } else {
            if(isAndroid && isChrome) {
                // chrome on android doesn't switch values of availHeight and availWidth on orientation landscape
                for (var i = 0; i < offset.length; i++) {
                    if(ih == (sh - offset[i])) {
                        if(debug) alert(window.orientation + ' ' + ih + '==' + sh + ' offset:' + offset[i]);
                        isWebApp = true;
                        break;
                    }
                }
            } else {
                for (var i = 0; i < offset.length; i++) {
                    if(ih == (sw - offset[i])) {
                        if(debug) alert(window.orientation + ' ' + ih + '==' + sw + ' offset:' + offset[i]);
                        isWebApp = true;
                        break;
                    }
                }
            }
        }
    }
}
return isWebApp;

}我找到了安卓设备的完整列表,
大小为25dp或0dp,具体取决于设备。到目前为止,我测试过的所有设备都将其转换为javascript中的25px,其中viewport content=width=device width,initial scale=1,maximum scale=1,user scalable=no.

为什么需要这样做?我需要这一功能,用于一个需要检测其是否在chrome或safari移动设备上以独立模式运行的Web应用程序。如果是这样的话,我的网站/webapp在登录部分的表现将明显不同。谢谢澄清。