gpt4 book ai didi

javascript - 如何区分 PhoneGap 应用程序和 native 浏览器?

转载 作者:行者123 更新时间:2023-11-29 22:25:45 26 4
gpt4 key购买 nike

为了加快开发速度,我们的团队已经养成了直接在 Chrome 中测试大部分 phonegap 实现的习惯(因为它几乎都是 Javascript)。但是我们想要在 Phonegap 提供的 ondeviceready 回调中运行某些代码(或者只是在浏览器中的 document.ready 上)。如果我们想在两种情况下调用不同的代码,我们如何区分这两种情况?

最佳答案

我们采用相同的方法并遇到相同的问题。以下是我们针对 Android 解决该问题的方法(应该适用于 WebKit 浏览器,即在 iOS 上也适用)。

思路是:

  • 创建一个表明 PhoneGap 处于 Activity 状态的 Java 类。
  • 将其添加到浏览器的全局对象列表中。
  • 编写封装检查的 JavaScript 包装器。

现在是一些代码。

Java 类:

public class MyPhoneGap {

public boolean isActive() {
return true;
}
}

向浏览器注册此类的实例:

public class MyActivity extends DroidGap {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setIntegerProperty("splashscreen", R.drawable.splash);
super.loadUrl("file:///android_asset/www/index.html");
this.appView.getSettings().setJavaScriptEnabled(true);
this.appView.addJavascriptInterface(new MyPhoneGap(), "MyPhoneGap");
}
}

JavaScript 包装器:

My.PhoneGap = {
active : null,
isActive : function() {
if (!My.Util.Type.isBoolean(My.PhoneGap.active)) {
if (My.Util.Type.exists(window.MyPhoneGap)) {
if (window.MyPhoneGap.isActive()) {
My.PhoneGap.active = true;
} else {
My.PhoneGap.active = false;
}
} else {
My.PhoneGap.active = false;
}
}
return My.PhoneGap.active;
}
};

用法:

if (My.PhoneGap.isActive()) {
// Rely on PhoneGap APIs
} else {
// Use some mock/default/dummy impl
}

最后一点:在Chrome中开发/测试非常方便,但请在真机上进行测试。性能/API 可靠性方面的差异非常不同。

关于javascript - 如何区分 PhoneGap 应用程序和 native 浏览器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9545805/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com