Tenemos una aplicación ios nativa, que muestra una vista web con una página web HTML y dos iframes. Dentro de esos iframes, mostramos nuestros artículos de archivos HTML ubicados en los recursos de la aplicación. Dentro de los artículos, a menudo hay scripts javascript que operan en ambos artículos al mismo tiempo. Por ejemplo, ponga alguna parte del texto en negrita. Para ello, lista todos los elementos con una determinada clase y modifica su estilo CSS.
$(".question").length() devolvería la cantidad de elementos con clase .question en ambos iframes en iOS, donde solo devolvería elementos del iframe actual en Android. Por "actual" me refiero a aquel con el que el usuario interactuó para iniciar el script.
Tenemos el requisito de lanzar también una aplicación para Android. Todo salió bien, hasta que probé un artículo, donde javascript tiene que operar en ambos iframes. Desafortunadamente, solo puede acceder a elementos de un iframe.
¿Hay alguna forma de que funcione sin cambiar el código de los javascript adjuntos a los artículos? No tengo autoridad allí [además de que podría haber miles de artículos con muchos javascript personalizados para actualizar].
Gracias
Así es como manejé un caso similar
webview.loadDataWithBaseURL("file:///android_asset/", your_html_as_string_here, "text/html", "utf-8", null); webview.getSettings().setJavaScriptEnabled(true); // enable javascript webview.addJavascriptInterface(new WebViewJavaScriptInterface(getActivity()), "app");y tiene que crear una clase interna y llamar a la misma función que se menciona en la interfaz de javascript como 'app.function1'
public class WebViewJavaScriptInterface { private Context context; /* * Need a reference to the context in order to sent a post message l */ public WebViewJavaScriptInterface(Context context) { this.context = context; } /* * This method can be called from Android. @JavascriptInterface * required after SDK version 17. */ @JavascriptInterface public void function1() { ll_translucent.setVisibility(View.VISIBLE); } /* * This method can be called from Android. @JavascriptInterface * required after SDK version 17. */ @JavascriptInterface public void function2() { new CommonActions(getActivity()).showSnackToast(verticalSeekBar, "Purchase Episode to read Further"); } }