2012-03-03 38 views
2

爲了加速開發,我們的團隊已經習慣於直接在Chrome中測試大部分phonegap實現(因爲它幾乎全部是Javascript)。但是我們想要在Phonegap提供的ondeviceready回調中運行某些代碼(或者只在瀏覽器中的document.ready中運行)。如果我們想在兩種情況下調用不同的代碼,我們如何區分這兩種情況?如何區分PhoneGap應用程序和本機瀏覽器?

回答

1

我們遵循相同的方法,並有同樣的問題。以下是我們如何解決Android的問題(應使用WebKit瀏覽器,例如iOS)。

的理念是:

  • 創建一個Java類,它說的PhoneGap是積極的。
  • 將其添加到瀏覽器中的全局對象列表中。
  • 編寫封裝了支票的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可靠性的差異是巨大的不同。

+0

。出於好奇,不確定的,是否有你用來代替PhoneGap的插件addJavascriptInterface任何理由? – 2012-03-03 20:14:20

+0

@WaynnLue PhoneGap插件是異步的,這使事情變得更加複雜。 – lexicore 2012-03-04 09:43:50

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 ... 
} 
相關問題