Sometimes throws Uncaught Error: Error calling method on NPObject on Android

后端 未结 4 702
栀梦
栀梦 2020-12-24 07:35

I am having problems with the Webview in Android and it\'s JavascriptInterfaces.

I am passing a string to the JavascriptInterface. When debugging it, I receive the c

相关标签:
4条回答
  • 2020-12-24 07:46

    Operate iframe in Android 4.4 WebView may cause a similar exception(Uncaught ReferenceError: NPObject deleted), finally I find out the solution:

    @Override
    public void onPageFinished(final WebView view, String finishUrl) {
        super.onPageFinished(view, finishUrl);
        // android 4.4 may lost value of 'Android' when operating iframe
        view.addJavascriptInterface(Activity.this, "Android");
    }
    
    0 讨论(0)
  • 2020-12-24 07:47

    Another reason can be a RuntimeException on a WebViewCoreThread. Any exception occurred after receiving @JavascriptInterface call will be logged as NPObject error if still running on a WebView thread. Overall insufficient trace message with little clue about the problem.

    Correct your issue with handling javascript interface call on a suitable thread.

    Example A. (NPObject error):

    @JavascriptInterface
    public void jsCall() {
        Log.v(TAG, "Prepared NullPointerException on "+Thread.currentThread());
        String s = null;
        s.length();  // This will cause NPObject error
    }
    

    Example B. (NullPointerException):

    @JavascriptInterface
    public void jsCall() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                Log.v(TAG, "Prepared NullPointerException on " + Thread.currentThread());
                String s = null;
                s.length();  // This will throw NullPointerException
            }
        }).start();
    }
    

    Take this as an addition to @Nico.S's answer.

    0 讨论(0)
  • 2020-12-24 07:56

    To highlight the comment from @Leog

    The same error occurs if you call the native javascript function with wrong parameters

    This was the source of my error

    0 讨论(0)
  • 2020-12-24 08:01

    It happens when you try, using method called from javascript interface, to interact with UI. To solved it in this way:

    class mJSInterface()
    {
    
    public void myFunction()
    {
        runOnUiThread(new Runnable() {
    
                public void run() {
                    //Code that interact with UI
                }
            });
    
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题