从 javascript 和 android 传递和返回值并用作电话间隙插件

Posted

技术标签:

【中文标题】从 javascript 和 android 传递和返回值并用作电话间隙插件【英文标题】:Pass and return the values from javascript and android and use as a phone gap plugin 【发布时间】:2012-02-17 10:45:15 【问题描述】:

我想为手机创建一个插件,它可以在 javascriptandroid 之间传递并返回值。

任何人都可以就如何做到这一点提出任何想法吗?

【问题讨论】:

【参考方案1】:

其实,这并不难。在这里,我将向您展示如何在页面内从 javascript 调用本机代码,反之亦然:

在网络视图中调用本机代码: 创建 web 视图时添加 javascript 接口(基本上是 java 类,其方法将被公开以通过 web 视图中的 javascript 调用。

JavaScriptInterface jsInterface = new JavaScriptInterface(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(jsInterface, "JSInterface");

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);
    

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

<script>
    function playVideo(video)
        window.JSInterface.startVideo(video);
    
</script>

是不是很简单?

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

<script>
    function function()
        //... do something
    
</script>

然后你在原生代码中通过 WebView 调用这个函数:

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

【讨论】:

嘿,谢谢鲍里斯:D 这正是我想要的。我真的很喜欢你用一种非常简单的方式详细地写了。 Jgd,上帝保佑你:) 从本机代码调用 javascript 代码有效,但是如何更改它以将值从 javascript 返回到 java 代码 @user280109:需要在调用中添加参数值。这是一个例子:***.com/a/4330642/1108032 @BorisStrandjev 如何在“从 Web 视图中调用本机代码”中获取返回值?想象一下“startVideo”方法返回“Nice Video!”。我怎样才能得到它'playVideo'? @Mr.Hyde 我能想到的事情是在被调用的本机代码中(在方法完成之前)调用另一种本地通信方式。此 javascritp 代码将使用所需的值初始化 javascript 变量。也许有更快更好的解决方案,但我不知道。【参考方案2】:

这是用于创建 PhoneGap 插件的tutorial。 ChildBrowser 插件的instructions 也特别好。

【讨论】:

以上是关于从 javascript 和 android 传递和返回值并用作电话间隙插件的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Blob 对象从 javascript 传递到 Android?

有没有办法在Android上将arraybuffer从javascript传递到java?

在 Android 上使用 addJavascriptInterface() 传递 JavaScript 对象

从原生android发送数据到webview javascript页面重新加载网页

如何从Android调用javascript?

通过@JavascriptInterface将字符串从Android传递给WebView中的JS