2016-01-05 2 views
1

У меня есть ViewPager с WebViews, содержащий некоторый контент HTML и JS.Android Webview останавливает загрузку с достижением 90% после инъекции JS

Когда я вызываю следующее:

public void goToAnchor(String hash) { 
    this.loadUrl("javascript:alert(myapp.getAnchorOffset(\'"+hash+"\'));"); 
} 

это руны на JavaScript правильно, и в моем WebChromeClient я слушаю предупреждение, созданное в функции JS "getAnchorOffset", как это:

public boolean onJsAlert(WebView view, String url, String message, JsResult result) { 

      //Set the page 
      int offset = Math.round(Float.parseFloat(message)); 

      Log.d("Anchor - ", "Offset = " + offset); 
      Log.d("Anchor - ", "width = " + mWebView.getWidth()); 

      //Get the page 
      int page = Math.round(offset/mWebView.getWidth()); 

      //Make the callback 
      anchorListener.didGetAnchorPage(page); 
      return true; 
     } 

Это также правильно вызвано, и я получаю правильное значение в переменной «page». Теперь смешная/досадная часть заключается в том, что когда я делаю обратный вызов с помощью anchorListener.didGetAnchorPage, он выполняет обратный вызов, но все следующие webView, которые я использую, не будут загружаться, а прогресс останавливается на уровне 90%.

Как если бы я перешел на страницу 20 в ViewPager, WebView перестанет загружаться с 90%, и это всегда происходит после вызова JS, который я делаю.

Функция JS называется получение заключается в следующем:

myapp.getAnchorOffset = function(elementId) { 
var searchResult = $(document).find("#"+elementId).first(); 
if (searchResult.length == 0) { 
    console.log("ERROR - no DOM element found by id: " + elementId); 
    return 0; 
} 
return searchResult.offset().left; 

};

Кто-нибудь знает почему?

Заранее спасибо.

+0

Я только заметил, что если я изменил возвращаемое значение onJsAlert на true, тогда он фактически отобразит другие страницы, но также отобразит предупреждение, и это не должно произойти. Как это можно исправить? – Kenneth

ответ

0

Я только что нашел решение.

Хитрость заключается в том, чтобы справиться с Js предупреждение как следующее:

mWebView.setWebChromeClient(new WebChromeClient() { 
     @Override 
     public boolean onJsAlert(WebView view, String url, String message, JsResult result) { 

      //Set the page 
      int offset = Math.round(Float.parseFloat(message)); 

      Log.d("Anchor - ", "Offset = " + offset); 
      Log.d("Anchor - ", "width = " + mWebView.getWidth()); 

      //Get the page 
      int page = Math.round(offset/mWebView.getWidth()); 

      //Make the callback 
      anchorListener.didGetAnchorPage(page + pageInEpub); 
      result.cancel(); 
      return true; 
     } 

С "result.cancel();" перед заявлением о возврате.

Смежные вопросы