En référence à ce didacticiel WebView , en particulier cette méthode
private void setupWebView(){ String MAP_URL = "http://gmaps-samples.googlecode.com/svn/trunk/articles-android-webmap/simple-android-map.html"; String centerURL = "javascript:centerAt(" + mostRecentLocation.getLatitude() + ","+ mostRecentLocation.getLongitude()+ ")"; webView = (WebView) findViewById(R.id.webview); webView.getSettings().setJavaScriptEnabled(true); //Wait for the page to load then send the location information webView.setWebViewClient(new WebViewClient(){ @Override public void onPageFinished(WebView view, String url){ webView.loadUrl(centerURL); } }); webView.loadUrl(MAP_URL); }
J'ai remarqué que si je place le webView.loadUrl(centerURL);
Directement après webView.loadUrl(MAP_URL);
comme ça
private void setupWebView(){ String MAP_URL = "http://gmaps-samples.googlecode.com/svn/trunk/articles-android-webmap/simple-android-map.html"; String centerURL = "javascript:centerAt(" + mostRecentLocation.getLatitude() + "," + mostRecentLocation.getLongitude()+ ")"; webView = (WebView) findViewById(R.id.webview); webView.getSettings().setJavaScriptEnabled(true); //Wait for the page to load then send the location information webView.setWebViewClient(new WebViewClient(){ @Override public void onPageFinished(WebView view, String url){ //DO NOTHING } }); webView.loadUrl(MAP_URL); webView.loadUrl(centerURL); }
Ça ne fonctionne plus. Donc, la méthode javascript centreAt(..)
est contenue dans MAP_URL
.
Je me demandais si la webView.loadUrl(..)
revient avant que l'URL ne soit effectivement chargée. Il ressemble de cette façon car la méthode supérieure attend qu'il soit complètement chargé avant d'exécuter le javascript
Oui, webView.loadUrl()
est asynchrone: il retourne immédiatement et WebView continue de fonctionner dans son propre thread.
Pour surveiller le chargement de la page WebView, utilisez WebViewClient.onPageFinished(..)
:
webview.setWebViewClient(new WebViewClient() { public void onPageFinished(WebView view, String url) { // do something here } });