赋值和addJavascriptInterface:在java中拦截的任何方法?

时间:2012-07-31 01:36:02

标签: java javascript android webview

如果您有Android WebView,并且使用addJavascriptInterface将接口添加到java对象,是否有办法让Java处理赋值?

JS:

javaObject.x = 10

爪哇:

??

这种事情很好:

javaObject.setX(10)

但是我正在尝试使用现有的javascript代码库,它有很多使用赋值的调用,理想情况下我想尽可能少地进行更改。

2 个答案:

答案 0 :(得分:0)

final class DemoJavaScriptInterface {  

    DemoJavaScriptInterface() {  
        // code here...
    }

    public int  X ;
} 

答案 1 :(得分:0)

根据WebView.addJavascriptInterface()的文档,只能从JavaScript访问Java对象的公共方法。这意味着您无法在Javascript中为Java对象中的类成员变量赋值。

http://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object, java.lang.String)

例如:

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>