android - 如何使用 WebView.addJavascriptInterface 将 java 类与 javascript 函数格式绑定(bind)为 "A.B.func()"

标签 android webview

我想在我的应用程序的 WebView Activity 中支持格式为“A.B.func()”的一些自定义 JavaScript 接口(interface)。

这是一个例子

网页的html&js代码如下:

<html>
    <body>
        <script type="text/javascript">
            document.write("B.func1() return " + A.B.func());
        </script>
    </body>
</html>

我的java代码是这样的:

public class MyDemo extends Activity {
    private WebView mWebView;

    public void onCreate(Bundle savedInstanceState) {
        ...
        mWebView = (WebView)findViewById(R.id.webView1);
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.addJavascriptInterface(new AClass(), "A");
        mWebView.loadUrl("file:///android_asset/mydemo.html");
    }

    final class AClass {
        final class BClass {
            BClass() {}
            int func() { return 1; }
        }

        public BClass B = new BClass();

        AClass() {}
    }
}

但是当我在模拟器上运行我的应用程序时,它无法以正确的方式运行。 LogCat 向我发送警告,例如: TypeError:表达式“A.B”的结果 [undefined] 不是对象。在文件:///android_asset/mydemo.html

所以我的问题是:
1. 如果我想将 javascript 接口(interface)格式绑定(bind)为“A.B.func()”到我的 java 类,我该怎么做?
2.如果我想直接获取javascript类的属性,而不是通过函数调用,我该怎么办? 显示 Q2 的 javascript 示例 使用“var prop = A.property” 不要使用“var prop = A.getProperty()”

期待您的帮助!谢谢!

最佳答案

我认为你做不到。您可以只在 A 中添加方法,例如 b_doSomething(){B.doSomething()} 以“转发”您的调用,并从 javascript 调用这些方法。

至于访问属性,我不确定是否可行,Javascript 接口(interface)是为调用方法而设计的(我猜这很像普通的 Java 接口(interface))。

关于android - 如何使用 WebView.addJavascriptInterface 将 java 类与 javascript 函数格式绑定(bind)为 "A.B.func()",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6529039/

相关文章:

android - 在代码中发誓

android - 软键盘隐藏了一半的 EditText

ios - SFSafariViewController 完成按钮不起作用

jquery - Phonegap Android 应用程序链接不起作用?

java - 以编程方式监听特定 url 的网络调用

android - 如何将复制的文本传递给 Android 中的其他 Activity

android - ner::ERR_CACHE_MISS Android 4.4 WebView

Android Webview - 完全清除缓存

ios - 使用 SFSafariViewController 的主要优点是什么?

android - Twitter 网址无法在 android webview 中打开