为了加快开发速度,我们的团队已经习惯直接在Chrome中测试我们的大部分手机屏幕实现(因为它几乎都是Javascript)。但是我们想要在Phonegap提供的ondeviceready回调中运行某些代码(或者只是在浏览器中的document.ready上)。如果我们想在两种情况下调用不同的代码,我们如何区分这两种情况?
答案 0 :(得分:1)
我们采用相同的方法并遇到同样的问题。以下是我们为Android解决的问题(应该与WebKit浏览器一起使用,也可以在iOS上使用)。
这个想法是:
现在有些代码。
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可靠性的差异非常不同。
答案 1 :(得分:1)
您可以查看JavaScript中是否未定义设备
/* are we running on device or in a browser? */
this.isDevice = (typeof(device) != 'undefined');
/* if the device is not defined we assume we in a browser */
if(!this.isDevice) {
... browser code here ...
}