2015-12-22 5 views
1

У меня есть следующие приложения:Android Webview не загружается Javascript впрыскивается изображения

От начала WebView создаются и загрузит локальный (в приложении) HTML-файл. Этот локальный HTML-файл содержит некоторый javascript, который может обновлять HTML, когда данные анализируются на нем.

Только когда я анализирую данные, изображения не загружаются, однако я могу видеть изменение HTML и видеть правильные теги img с правильными URL-адресами. Я тестировал javascript и данные, которые я отправляю им в браузере, и он работает.

Мое приложение:

private static final String URL = "file:///android_asset/overview.html"; 
private WebView wView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    //Set settings 
    wView = (WebView) findViewById(R.id.webView); 
    wView.getSettings().setJavaScriptEnabled(true); 
    wView.getSettings().setUseWideViewPort(true); 
    wView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
    wView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 

    //TMP DEBUDDING 
    wView.setWebContentsDebuggingEnabled(true); 

    //Create interface called "AppBridge" for JavaScript 
    wView.addJavascriptInterface(new WebAppInterface(this), "AppBridge"); 

    wView.setWebViewClient(new WebViewClient() { 
     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
      view.loadUrl("javascript:testInject('Hello World');"); 
      view.loadUrl("javascript:updateOverview(SOME DATA);"); 
     } 
     @Override 
     public void onLoadResource (WebView view, String url) { 
      Log.v(TAG, "Webview load Resouce " + url); 
     } 
    }); 

    wView.setWebChromeClient(new WebChromeClient() { 
     @Override 
     public boolean onJsAlert(WebView view, String url, String message, JsResult result) { 
      Log.d(TAG, message); 
      return true; 
     } 
    }); 

    wView.loadUrl(URL); 

Кто-нибудь есть идея, что запрещающая WebView загрузки моих инъекционных HTML изображений.

---- UPDATE ---- Некоторое дополнительное тестирование при добавлении тега img вручную в html изображение загружается, а затем при добавлении его снова через javascript показано. Но только одно и то же изображение показывает, что все остальные еще не загружены.

+0

Вы пытались использовать шаблон 'content: // your.app.name /' для дополнительных файлов? Но для файлов, входящих в ваш apk, вы должны использовать относительные пути. В примере, который вы даете, вы используете абсолютный путь, которому почти наверняка будет отказано в разрешении. – coladict

ответ

1

После приблизительно 8 часов испытаний, отладки и удара головой. Я нашел решение.

Вдохновленный следующей статье http://artemzin.com/blog/android-webview-io/

Переопределелив shouldInterceptRequest в WebView Виль загрузки изображений.

wView.setWebViewClient(new WebViewClient() { 
     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
      view.loadUrl("javascript:testInject('Hello World');"); 
      view.loadUrl("javascript:updateOverview("SOME DATA"); 
     } 

     @Override 
     public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { 
      return super.shouldInterceptRequest(view, request); 
     } 

    }); 
Смежные вопросы