簡體   English   中英

從Java調用javascript函數

[英]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上 要修復它,我像這樣設置對象cContext值:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM