如何在javascript中创建界面并调用android方法?

时间:2017-07-27 07:12:15

标签: javascript android webview interface

我正在构建一个Android应用程序,其中在webView上加载失败的HTTP文件,该文件位于assets文件夹中。下面是失败HTTP文件的代码。

<html>
<head>
</head>
<body>
<a href="javascript:void(0);" onclick="init();">Click on this link for a log 
message</a>
<br><br><br><br><br>

 <script>
function init(){
    android.log('Data from JS');
    android.log(android.data);
}

function showMessage(str){
    android.log(str);
}
</script>

</body>
</html>

OnCreate Code

 //add interface
    wv.addJavascriptInterface(jsInterface, "android");//android is the 
    keyword that will be exposed in js

OnClick方法和界面方法

 public void click(View view){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        wv.evaluateJavascript("javascript:showMessage('Hello World!')", null);
    }
}

//javascript interface
private class JsInterface {
    @JavascriptInterface
    //function that will be called from assets/test.js
    //js example: android.log('my message');
    public String data() {
        return "DATA FROM ANDROID";
    }

    public void log(String msg) {
        Log.d("MSG FROM JAVASCRIPT", msg);
    }
}

上面是我在JavaScript中使用界面的完整代码。很长一段时间我曾经使用它在我的旧项目中工作,但现在它不工作可以任何一次回答我是这个方法在Android中被弃用或有任何其他解决方法吗?

2 个答案:

答案 0 :(得分:0)

这是js接口类:

public class JS_INTERFACE {

    Context mContext;

    /** Instantiate the interface and set the context */
    JS_INTERFACE(Context c) {
        mContext = c;
    }

    /** Show a toast from the web page */
    @JavascriptInterface
    public void native_showToast(String toast) {
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    }

    @JavascriptInterface
    public void native_ShowNotifyTest1(String toast , String BigOrSmall ) {

        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();

    }

}


 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    WebSettings settings = webView1.getSettings();

    // Enable Javascript
    settings.setJavaScriptEnabled(true);

    webView1.addJavascriptInterface(new JS_INTERFACE(getContext()), "android");

}

我使用onCreateView进行初始化。

更新回答:

在您的应用中使用JQ(简单使用evaluateJavascript):

 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {

        webView.evaluateJavascript("someJQFunction();", null);

    } 
else {

        webView.loadUrl("javascript: someJQFunction();");

    }

答案 1 :(得分:-1)

@JavascriptInterface之前添加public void log(String msg)