Cordova:判断页面是否在设备应用中打开

Cordova: judge whether the page is opened in a device app

我正在使用 cordova,并将站点(远程,而不是 cordova 应用程序项目中的本地文件)提供给普通浏览器和我 phone 上安装的特定应用程序。

问题来了,如果是在app内打开页面,应该引入cordova脚本,而如果是在普通浏览器下打开,则不应该。

所以我想知道是否有一种方法可以判断该页面是否在应用程序内部打开?

if (isApp()) {
    document.addEventListener('deviceready', () => {
        bootstrap();
    }
} else {
    bootstrap();
}

我在这两种情况下都看到了UserAgent,似乎那里没有任何重要信息。

或者如果我可以在 cordova 项目中添加一些 UserAgent 信息?

您可以测试 window.cordova 以确定您的应用程序在 Cordova 环境中是否 运行(即 cordova.js 包含在页)

将以下行添加到 /config.xml

参见:http://cordova.apache.org/docs/en/dev/config_ref/index.html#Android%20Configuration

<preference name="AppendUserAgent" value="Cordova" />

那么,我们可以在很早的时候用下面的条件来判断:

function isApp() {
    return /Cordova/.test(windows.navigator.userAgent);
}

我们可以自行决定是否引入 cordova.js:

let cordovaReady = null;

if (/Cordova/.test(window.navigator.userAgent)) {
  cordovaReady = new Promise((resolve, reject) => {
    const script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = '/cordova/cordova.js';
    script.onload = () => {
      document.addEventListener('deviceready', () => {
        resolve();
      }, false);
    };
    document.body.appendChild(script);
  });
} else {
    cordovaReady = Promise.reject();
}

// We got cordovaReady as a Promise that tells both `inApp()` and `deviceready`.
cordovaReady.then(() => { // done
    // windows.cordova is available
}, () => { // fail
    // windows.cordova is undefined
    console.log('The page is not open under Cordova App.');
}).then(() => { // always
    // launch your app
    bootstrap();
});