Assignment和addJavascriptInterface:在java中有没有拦截的方法?
如果您有一个AndroidWebView,并且您使用addJavascriptInterface向java对象添加了一个接口,那么有没有办法让java处理分配 JS: 爪哇: 这种方法很有效:Assignment和addJavascriptInterface:在java中有没有拦截的方法?,java,javascript,android,webview,Java,Javascript,Android,Webview,如果您有一个AndroidWebView,并且您使用addJavascriptInterface向java对象添加了一个接口,那么有没有办法让java处理分配 JS: 爪哇: 这种方法很有效: javaObject.setX(10) 但是我正在尝试使用一个现有的javascript代码库,它有很多使用赋值的调用,理想情况下,我希望对它进行尽可能少的更改。根据的文档,只有Java对象的公共方法才能从javascript访问。这意味着您不能从Javascript中为Java对象中的类成员变量赋值
javaObject.setX(10)
但是我正在尝试使用一个现有的javascript代码库,它有很多使用赋值的调用,理想情况下,我希望对它进行尽可能少的更改。根据的文档,只有Java对象的公共方法才能从javascript访问。这意味着您不能从Javascript中为Java对象中的类成员变量赋值
final class DemoJavaScriptInterface {
DemoJavaScriptInterface() {
// code here...
}
public int X ;
}
例如:
public class JavaScriptInterface {
public int x;
private int y;
public void setY(int value) {
y = value;
Log.d("JavaScriptInterface", "setY = " + y);
}
}
...
public void onCreate(Bundle b) {
super.onCreate(b);
...
WebView webView = (WebView) findViewById(R.id.webview);
webView.addJavascriptInterface(new JavaScriptInterface(), "Android");
webView.loadUrl(myHtmlFile);
}
生活在myHtmlFile中的Javascript:
<script type="text/javascript">
Android.x = 10; // this will not work
Android.setY(1000); // this will work!
</script>
Android.x=10;//这行不通
Android.setY(1000);//这会有用的!
您能详细解释一下“java处理的分配”是什么意思吗?您只是想通过类成员赋值而不是对JavaScriptInterface对象的方法调用将值从javascript传递到java吗?我想您的问题的答案是肯定的,但我想不出一种方法来编辑问题以使其更清楚。这与问题无关。
public class JavaScriptInterface {
public int x;
private int y;
public void setY(int value) {
y = value;
Log.d("JavaScriptInterface", "setY = " + y);
}
}
...
public void onCreate(Bundle b) {
super.onCreate(b);
...
WebView webView = (WebView) findViewById(R.id.webview);
webView.addJavascriptInterface(new JavaScriptInterface(), "Android");
webView.loadUrl(myHtmlFile);
}
<script type="text/javascript">
Android.x = 10; // this will not work
Android.setY(1000); // this will work!
</script>