如果您有一个 Android WebView,并且您使用 addJavascriptInterface 将接口添加到 java 对象,有没有办法让 java 处理分配?
JS:
javaObject.x = 10
爪哇:
??
这种事情很好用:
javaObject.setX(10)
但我正在尝试使用现有的 javascript 代码库,该代码库有很多使用赋值的调用,理想情况下我想对其进行尽可能少的更改。
如果您有一个 Android WebView,并且您使用 addJavascriptInterface 将接口添加到 java 对象,有没有办法让 java 处理分配?
JS:
javaObject.x = 10
爪哇:
??
这种事情很好用:
javaObject.setX(10)
但我正在尝试使用现有的 javascript 代码库,该代码库有很多使用赋值的调用,理想情况下我想对其进行尽可能少的更改。
According to the documentation for WebView.addJavascriptInterface(), only the Java object's public methods are able to be accessed from JavaScript. Meaning that you cannot assign a value to a class member variable in the Java object from within Javascript.
For example :
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);
}
Javascript that lives in myHtmlFile:
<script type="text/javascript">
Android.x = 10; // this will not work
Android.setY(1000); // this will work!
</script>
final class DemoJavaScriptInterface {
DemoJavaScriptInterface() {
// code here...
}
public int X ;
}