java - 如何在 Android 中添加嵌套对象作为 JavascriptInterface?

标签 java javascript android

我需要在 WebView 中调用一个包含一些 javascript 的网站。 JavaScript 调用嵌套对象中的方法,如下所示:

window.plugins.anObject.method();

我需要拦截对 method() 的调用,并在调用时执行某些操作(即 Java 中 method() 的 native 实现)。如果没有那个plugins对象,我就会这么做

myWebView.addJavascriptInterface(new Object() {
    @JavascriptInterface
    public void method() {
        // yay!
    }
}, "anObject");

但正如我所写,anObject 必须是另一个 plugins 对象的子对象。所以我尝试用 "plugins.anObject" 替换 "anObject" 但这不起作用。有什么办法可以实现这一目标吗?

最佳答案

使用情况:

window.plugins.anObject.method();

也许你可以尝试这个:

网页 View 代码:

myWebView.addJavascriptInterface(new Object() {
    @JavascriptInterface
    public void anObject() {
        return new Object(){
             @JavascriptInterface
             public void method() {
                 //yay!
             }
        }
    }
}, "plugins");

js代码:

window.plugins.anObject().method();

注意:

返回给你的js的NPObject根本不是一个常见的javascript对象,你不能迭代这个对象,并且当你在webview中定义时不能重新定义你的成员函数,如下所示:

$(function(){
var old_method = window.plugins.method;
window.plugins.method = function(){
    //do some thing
    old_method();
    //do another thing
};
});

关于java - 如何在 Android 中添加嵌套对象作为 JavascriptInterface?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18510294/

相关文章:

java - Array[i] = scnr.nextInt();在线程 "main"java.util.NoSuchElementException 中导致异常

javascript - 在 javascript 中, ( ... ) 究竟做了什么

javascript - 如何使用路由器和内置/自定义属性在 aurelia 中创建下拉菜单?

java - 安卓/Java : Annual countodwn with having to update it constantly

android - 将二维对象数组传递给另一个 Activity

android - 无法在获取 react 原生时设置状态

java - 如何运行一个新进程,并关闭 Java 中的当前程序?

Java MySQL 连接池不工作

javascript - 在移动设备上捏合/缩放滚动图像

java - java web start 应用程序可以在没有 .jnlp 文件的情况下存在吗?