Uncaught Error: Error calling method on NPObject.

最近弄android与JS交互遇到一个奇怪的问题。首先了解一下具体的场景。

一个Activity中有一个WebView,然后有一个Android原生Button,默认Button是不可用状态,WebView要展示的东西是可以上下滑动的,当WebView中内容滑动到底部JS会回调Android的一个方法。我在这个方法中将Button设为可用状态。

@JavascriptInterface
public void readed() {
   button.setEnabled(true);
}

实际情况是JS已经调用了readed方法,但是Button的状态却未体现出来,并且只有点击Button一下,Button才会显示为可用状态。百思不得其解啊。很久之后注意到日志中有这么一个异常信息:

Uncaught Error: Error calling method on NPObject.

最后查找了一些资料,没有太好的解释,但是使用下面的方式进行处理可以达到想要的效果,这里给出代码,稍后有时间探索一下具体的原理:

Handler mHandler = new Handler();

@JavascriptInterface
public void readed() {
    mHandler.post(new Runnale(){

        public void run(){
            button.setEnabled(true);
        }

    });
}

使用上面的代码就可以解决类似的问题了。

大概的原因可能是JS调用的readed方法不是主线程,所以更新UI会出现此类异常情况。

这里只是猜测,如果哪位童鞋知道具体原因欢迎留言指导。

你可能感兴趣的:(JavaScript,android,webView)