传递并返回来自javascript和android的值,并用作手机间隙插件

use*_*599 5 javascript android parameter-passing phonegap-plugins

我想为手机创建一个插件,它传递并返回javascript和android之间的值.

任何人都可以建议如何做到这一点?

Bor*_*jev 14

实际上,这并不是很困难.在这里,我将向您展示如何从页面中的javascript调用本机代码,反之亦然:

从Web视图中调用本机代码:
在创建Web视图时添加javascript接口(基本上是java类,其方法将在Web视图中通过javascript调用.

JavaScriptInterface jsInterface = new JavaScriptInterface(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(jsInterface, "JSInterface");
Run Code Online (Sandbox Code Playgroud)

javascript接口类本身的定义(这是我从我的另一个回答中获取的示例性类,并以本机意图打开视频)

public class JavaScriptInterface {
    private Activity activity;

    public JavaScriptInterface(Activity activiy) {
        this.activity = activiy;
    }

    public void startVideo(String videoAddress){
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.parse(videoAddress), "video/3gpp"); // The Mime type can actually be determined from the file
        activity.startActivity(intent);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果要从页面的HTML中调用此代码,请提供以下方法:

<script>
    function playVideo(video){
        window.JSInterface.startVideo(video);
    }
</script>
Run Code Online (Sandbox Code Playgroud)

容易不是吗?

从本机代码调用javascript代码:
这也很简单,假设在WebView中加载的HTML代码中你定义了javascript函数:

<script>
    function function(){
        //... do something
    }
</script>
Run Code Online (Sandbox Code Playgroud)

然后通过本机代码中的WebView调用此函数,如下所示:

webView.loadUrl("javascript:function()");
Run Code Online (Sandbox Code Playgroud)