2016-11-22 2 views
0

Ich möchte eine Webseite in einem WebView öffnen und auf eine Schaltfläche klicken, nachdem die Seite geladen wurde. Dies ist meine aktuelle WebView Klasse:Javascript funktioniert nicht immer in WebView

public class WebViewFragment extends Fragment { 

    ... 

    @Override 
    public void onResume() { 
     super.onResume(); 
     openUrl(); 
    } 

    private void openUrl() { 
     setCookies(); 
     if (urlToOpen != null) { 
      //tell webview to handle redirects (by default browser launches on redirects) 
      webview.setWebViewClient(new WebViewClient() { 
       @Override 
       public void onPageStarted(WebView view, String url, Bitmap favicon) { 
        super.onPageStarted(view, url, favicon); 

        if (getActivity() != null) 
         ((MainActivity) getActivity()).onShowLoading(); 
       } 

       @Override 
       public void onPageFinished(WebView view, String url) { 
        super.onPageFinished(view, url); 

        if (getActivity() != null) { 
         executeJS(); 
         ((MainActivity) getActivity()).onHideLoading(); 
        } 
       } 
      }); 
      if (javascriptToExecute != null) { 
       webview.getSettings().setJavaScriptEnabled(true); 
      } 
      webview.loadUrl(urlToOpen); 
     } 

    } 

    private void executeJS() { 
     System.out.println("executeJS(): " + javascriptToExecute); 
     webview.loadUrl(javascriptToExecute); 
    }  
} 

I "javascript:$('#customer-info-edit').click();" oder "javascript:document.getElementById('customer-info-edit').click();" funktionieren beide gut nutzen können.

Aber das Problem ist, dass sie nur einmal funktionieren. Wenn ich das WebView zum ersten Mal öffne, wird der Button angeklickt. Wenn ich jedoch die physische Zurück-Taste drücke und das WebView wieder öffne, wird die Schaltfläche nicht angeklickt. Warum funktioniert Javascript nicht jedes Mal?

+0

In einem Browser löst die Zurück-Schaltfläche ein erneutes Laden aus dem Cache aus, das kein Seitenladen auslöst, sondern es im vorherigen Zustand neu lädt. Ich habe noch nie ein Webview verwendet, also kann ich nicht sagen, ob das das gleiche Problem ist oder nicht, aber dieser Link gibt Ihnen einige Möglichkeiten, dies zu versuchen. Einfach das entsprechende Skript direkt in Ihre Seite einfügen ... http://stackoverflow.com/questions/15791148/startup-javascript-code-is-not-executed-when-user-the-firefox-back-button – Archer

Antwort

0

Ich weiß nicht, was das Problem genau war, aber ich fand eine funktionierende Lösung: Fügen Sie 500ms Verzögerung vor der Ausführung von Javascript.

Verwandte Themen