Assignment和addJavascriptInterface:在java中有没有拦截的方法?

Assignment和addJavascriptInterface:在java中有没有拦截的方法?,java,javascript,android,webview,Java,Javascript,Android,Webview,如果您有一个AndroidWebView,并且您使用addJavascriptInterface向java对象添加了一个接口,那么有没有办法让java处理分配 JS: 爪哇: 这种方法很有效: javaObject.setX(10) 但是我正在尝试使用一个现有的javascript代码库,它有很多使用赋值的调用,理想情况下,我希望对它进行尽可能少的更改。根据的文档,只有Java对象的公共方法才能从javascript访问。这意味着您不能从Javascript中为Java对象中的类成员变量赋值

如果您有一个AndroidWebView,并且您使用addJavascriptInterface向java对象添加了一个接口,那么有没有办法让java处理分配

JS:

爪哇:

这种方法很有效:

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>