Android JS in WebView.loadUrl ()

Ich möchte eine Webseite in WebView laden, aber Teile der Webseite entfernen. Also habe ich einen benutzerdefinierten WebViewClient erstellt. Und in onPageFinished (), habe ich einige Javascript, um einige Elemente zu entfernen. Dann habe ich das WebView sichtbar gemacht.

Allerdings, wenn ich es ausführen, setzt es die Sicht sichtbar, und dann sehe ich die Elemente entfernt werden. Es ist, als ob die JS im Hintergrund sehr langsam läuft. Es schafft ein schlechtes Seherlebnis, weil es die ganze Seite und dann die gewünschte Teilseite blinkt.

Hier ist mein onPageFinished ()

@Override public void onPageFinished(WebView view, String url) { view.loadUrl("javascript:" + "document.getElementsByClassName('header')[0].style.display='none';" + "document.getElementById('section_0').style.display='none';" + "document.getElementById('page-actions').style.display='none';" + "document.getElementsByClassName('languageSelector')[0].style.display='none';" + "document.getElementById('mw-mf-last-modified').style.display='none';" + "document.getElementById('footer').style.display='none';"); loadingView.setVisibility(View.INVISIBLE); view.setVisibility(View.VISIBLE); } 

Irgendwelche Ideen, wie man das beheben kann?

  • Stoppen Sie das Laden in webViewClient
  • WebViewClient.onPageStarted () wurde zweimal bei der Angabe von nicht vorhandener URL über WebView.loadURL () aufgerufen.
  • ShouldOverrideUrlLoading in WebView für Android läuft nicht
  • PDF in einem WebView öffnen
  • Wie kann man einen anderen Titel für den Alert-Dialog festlegen, wenn die WebView-Seite geladen ist?
  • Android WebViewClient onReceivedError wird nicht für einen 404-Fehler aufgerufen
  • Sind WebViewClient und WebChromeClient sich gegenseitig ausgeschlossen?
  • Android WebView Protocol Handler
  • 2 Solutions collect form web for “Android JS in WebView.loadUrl ()”

    In onPageFinished ():

     view.loadUrl("javascript:" + "var FunctionOne = function () {" + " var r = $.Deferred();" + " try{document.getElementsByClassName('header')[0].style.display='none';}catch(e){}" + " try{document.getElementById('section_0').style.display='none';}catch(e){}" + " try{document.getElementById('page-actions').style.display='none';}catch(e){}" + " try{document.getElementsByClassName('languageSelector')[0].style.display='none';}catch(e){}" + " try{document.getElementById('mw-mf-last-modified').style.display='none';}catch(e){}" + " try{document.getElementById('footer').style.display='none';}catch(e){}" + " setTimeout(function () {" + " r.resolve();" + " }, 2500);" + " return r;" + "};" + "var FunctionTwo = function () {" + " window.CallToAnAndroidFunction.setVisible();" + "};" + "FunctionOne().done(FunctionTwo);"); 

    In MainActivity.onCreate ():

     this.webView.addJavascriptInterface(new JsObject(webView, loadingView), "CallToAnAndroidFunction"); 

    In MainActivity ():

     public class JsObject { private View loadingView; private View view; JsObject(View view, View loadingView){this.view = view;this.loadingView = loadingView;} @JavascriptInterface public void setVisible(){ runOnUiThread(new Runnable() { @Override public void run() { view.setVisibility(View.VISIBLE); loadingView.setVisibility(View.INVISIBLE); } }); } } 

    Also, es war eine Kombination aus der Herstellung eines JavascriptInterface und eine JS-Funktion zu warten, bis die JS-Anrufe zu beenden, bevor Sie die Schnittstelle (mit den Sichtbarkeitseinstellungen) zu beenden.

    Sie könnten versuchen, Ihre WebView zu beschleunigen mit:

     webview.getSettings().setRenderPriority(RenderPriority.HIGH); webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 

    Wie auch immer, du solltest deine WebView nicht sofort sichtbar machen. Warum schaffst du keine Schnittstelle (siehe http://developer.android.com/guide/webapps/webview.html , Binding JavaScript Code zu Android) und mache einen Anruf von deinem Javascript an:

     public void myCallback(){ view.SetVisibilitu(View.VISIBLE) }; 

    Nachdem die animationen beendet sind

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.