我想在我的应用程序的 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/