A veces lanza Error no detectado: método de llamada de error en NPObject en Android
Tengo problemas con la Webview en Android y es JavascriptInterfaces.
Estoy pasando una cadena a JavascriptInterface. Al depurarlo, recibo la cadena correcta dentro de mi aplicación de Android. El problema: A veces tengo un error no detectado: Error al llamar al método en NPObject.
- ¿Por qué mi WebView no llena el ancho completo de mi pantalla?
- ¿Por qué Bitmap a Base64 Cadena que muestra el fondo negro en webview en android?
- ¿Cómo escuchar un WebView al terminar de cargar una URL?
- Android WebView no carga un archivo JavaScript, pero Android Browser lo carga bien
- Android ICS con problemas de compatibilidad con JQuery Mobile1.0
¿Alguien sabe por qué?
La interfaz en Java:
public class JSInterfaceGame extends JSInterface { @JavascriptInterface public void setShareText(String share){ shareText = share; if(mJSInterfaceListener != null) mJSInterfaceListener.onParametersChanged(SHARE_TEXT); }
La inicialización en el método onCreateView dentro del fragmento:
online = (WebView) rootView.findViewById(R.id.online); online.setWebViewClient(new WISWebviewClient() { @Override public void onStatusChanged(final WebView view, int progress, long duration) { //unrelated } }); WebSettings ws = online.getSettings(); ws.setJavaScriptEnabled(true); ws.setUserAgentString(USER_AGENT); ws.setCacheMode(WebSettings.LOAD_DEFAULT); ws.setRenderPriority(WebSettings.RenderPriority.HIGH); SharedPreferences settings = getActivity().getSharedPreferences(GameActivity.PREFERENCES, Context.MODE_PRIVATE); mJSInterface = new JSInterfaceGame(); mJSInterface.setJSInterfaceListener(this); // Defined elsewhere in this class. mJSInterface.setPlayerName(settings.getString(GameActivity.PREFS_PlAYERNAME, null)); online.addJavascriptInterface(mJSInterface, "JSInterface"); online.loadUrl("http://myurl.something");
Llame en Javascript:
function makeShareText() { var text = "Some text"; console.log(typeof text); // Always a string. JSInterface.setShareText(text); }
- Mostrar una parte de la página web en la vista web android
- ¿Cómo puedo validar un android.net.http.SsLCertificate con un X509TrustManager?
- Java nullpointer excepción de Webview en android.webkit.WebViewClassic.loadDataWithBaseURL
- Vista web de Android: lee las cookies
- Android 2.2 SDK - Inseguro JavaScript intenta acceder al marco con la URL - Google Checkout
- Ejemplo de aleación Android aplicación con una webview que carga html local y javascript?
- Eliminar el botón de inicio de sesión en google docs webview en android
- Cómo utilizar el token de acceso de Facebook en la vista de la aplicación de Android
Sucede cuando se intenta, utilizando el método llamado desde la interfaz javascript, para interactuar con la interfaz de usuario. Para solucionarlo de esta manera:
class mJSInterface() { public void myFunction() { runOnUiThread(new Runnable() { public void run() { //Code that interact with UI } }); } }
Para resaltar el comentario de @Leog
El mismo error ocurre si llama a la función javascript nativa con parámetros incorrectos
Esta fue la fuente de mi error
Otra razón puede ser una RuntimeException
en un WebViewCoreThread
. Cualquier excepción que se @JavascriptInterface
después de recibir la llamada @JavascriptInterface
se registrará como error NPObject si todavía se ejecuta en un hilo WebView. Mensaje de rastreo global insuficiente con poca pista sobre el problema.
Corrija su problema con el manejo de la llamada de interfaz javascript en un hilo adecuado.
Ejemplo A. (error NPObject):
@JavascriptInterface public void jsCall() { Log.v(TAG, "Prepared NullPointerException on "+Thread.currentThread()); String s = null; s.length(); // This will cause NPObject error }
Ejemplo 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(); }
Tome esto como una adición a la respuesta @ Nico.S.
Operar iframe en Android 4.4 WebView puede causar una excepción similar (Uncaught ReferenceError: NPObject eliminado), finalmente descubro la solución:
@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"); }
- Cualquier forma de suprimir las advertencias sobre "cadenas codificadas" en archivos de diseño?
- Cómo utilizar Android GradientDrawable