[英]Call javascript function from Java
我使用PhoneGap開發了一個應用程序。 我得到了一項在后台進行本地編碼的服務(該服務和電話缺口應用程序在同一項目中)。 不幸的是,我想從此服務調用javascript函數。 因此,我在網上搜索並創建了一些有趣的東西:創建一個擴展Plugin的類並在其中進行一些處理。 然后我發現了這個:
this.ctx.sendJavascript("myJavascriptFunction");
我用此代碼進行了測試,但是發生了一些錯誤:
java.lang.NullPointerException
這是我測試的方式:
class c = new class();
c.execute("myFunction",null,null);
在類c中,execute方法如下:
public PluginResult execute(String action, JSONArray args, String callbackId) {
if (action.equals("myFunction")){
Log.d(TAG,"start actions to do");
this.ctx.sendJavascript("nameOfFunctionToLaunch");
Log.d(TAG,"end actions to do");
return new PluginResult(PluginResult.Status.OK);
}
}
當應用啟動時,我有第一個
Log.d(TAG,"start actions to do");
我怎么解決這個問題 ?
您不能調用object.loadUrl(“ javascript:function();”); 從插件作為插件不會擴展Android的WebView。 要調用loadUrl,您必須將調用傳遞回擴展DroidGap的Home類。
您可以在插件中定義
Home home = null;
Looper.prepare();
home = new Home();
home.somefunc();
並在somefunc電話中
super.loadUrl("javascript:function();");
最終,我找到了解決方案:實際上, NullPointerException位於ctx上 。 要修復它,我像這樣設置對象c的Context值:
c.setContext(use_An_Object_Of_Type_PhonegapActivity);
要獲取對象,我可以使用以下方法從AppActivity中獲取它:
public class CloudPhoneAppActivity extends DroidGap {
private class NoScaleWebViewClient extends GapViewClient {
public NoScaleWebViewClient(DroidGap ctx) {
super(ctx);
myApp.ctx = ctx;
}
public void onScaleChanged(WebView view, float oldScale, float newScale) {
Log.d("NoScaleWebViewClient", "Scale changed: " + String.valueOf(oldScale) + " => " + String.valueOf(newScale));
}
}
/** other stuff after**/
}
所以最后這是解決方案:
class c = new class();
c.setContext(myApp.ctx);
c.execute("myFunction",null,null);
前面描述的execute方法沒有做任何更改。 但請注意如何調用javascript函數。
二灣
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.