我想在我的应用程序的WebView活动上支持一些格式为“A.B.func()”的自定义JavaScript接口。
这是一个示例
网页的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 : Result of expression 'A.B' [undefined] is not an object. at file:///android_asset/mydemo.html
所以我的问题是:
1.如果我想将javascript接口格式作为“A.B.func()”绑定到我的java类,我该怎么办呢?
2.如果我想直接获取javascript类的属性,而不是通过函数调用,我该怎么办?
一个javascript示例来显示Q2
使用“var prop = A.property”
不要使用“var prop = A.getProperty()”
期待你的帮助!谢谢!
答案 0 :(得分:3)
我认为你不能。您可以在A中添加方法,例如b_doSomething(){B.doSomething()}来“转发”您的调用,并从javascript中调用这些方法。
至于访问属性,我不确定是否可能,Javascript接口是为调用方法而设计的(我猜是非常像普通的Java接口)。
答案 1 :(得分:3)
Eclipse在LogCat中显示消息“Uncaught TypeError:Object [object Object]没有方法'toast'”。但在手机中它成功运作......
<script>
function doHemant() {
jse.doThis();
}
</script>
<input type="button" value="Toast" onClick="doHemant();" /> <br />
wv.addJavascriptInterface(new JavaScriptExtensions(), "jse");
class JavaScriptExtensions
{
public void doThis()
{
Toast.makeText(MainActivity.this, "Wata Toast...", TOAST_LONG).show();
}
}