【问题标题】:Assignment and addJavascriptInterface: any way to intercept in java?赋值和addJavascriptInterface:有什么方法可以在java中拦截?
【发布时间】:2012-07-31 01:36:02
【问题描述】:

如果您有一个 Android WebView,并且您使用 addJavascriptInterface 将接口添加到 java 对象,有没有办法让 java 处理分配?

JS:

javaObject.x = 10

Java:

??

这种事情很好用:

javaObject.setX(10)

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

【问题讨论】:

  • 您能否详细说明“由 java 处理的作业”是什么意思?是否只是想通过类成员分配而不是 JavaScriptInterface 对象上的方法调用将值从 javascript 传递给 java?
  • 我认为您的问题的答案是肯定的,但我想不出一种方法来编辑问题以使其更加清晰。

标签: java javascript android webview


【解决方案1】:
final class DemoJavaScriptInterface {  

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

    public int  X ;
} 

【讨论】:

  • 这与问题无关。
【解决方案2】:

根据WebView.addJavascriptInterface() 的文档,只有Java 对象的公共方法可以从JavaScript 访问。这意味着您不能从 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    相关资源
    最近更新 更多