无法在启用JavaScript的情况下在Webview中加载图片和视频

时间:2017-08-14 16:05:18

标签: javascript android video iframe webview

我将数据从网站加载到我的应用程序中的webview。我需要在webview中播放视频。我的问题是我不使用setJavaScriptAsEnable图片和视频加载得很好,但我无法在网页浏览中播放视频,它会给我以下错误

  

发生错误。尝试在youtube上观看此视频或启用JavaScript。

enter image description here

然而,当我使用setJavaScriptAsEnable(true)时,webview内的所有图像和视频都会消失,如下图所示。

enter image description here

这是我的webview代码

void setupWebView(final WebView webView) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING);
    } else {
        webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);
    }

    webView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            // add padding to the html page
            webView.loadUrl("javascript:(function(){ document.body.style.paddingBottom = '30px'})();");
        }


        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String request) {
            if (request.contains("http")) {// TODO: 14/08/2017 use regs
                Log.d("url", request);
                new CheckIfImageAsyncTask().execute(request);
                return true;
            }
            return false;
        }

        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            String url = request.getUrl().toString();
            if (url.contains("http")) {
                new CheckIfImageAsyncTask().execute(url);
                return true;
            }
            return false;
        }
    });
    // settings
    webView.setWebChromeClient(new WebChromeClient());
    webView.getSettings().setPluginState(WebSettings.PluginState.ON);
    webView.getSettings().setPluginState(WebSettings.PluginState.ON_DEMAND);
    webView.getSettings().setAllowFileAccess(true);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setDomStorageEnabled(true);

    String data = "<div>" + post.getContent() + " </div>";
    webView.loadDataWithBaseURL("file:///android_asset/", getHtmlData(data), "text/html", "utf-8", null);
}

  private class CheckIfImageAsyncTask extends AsyncTask<String, Void, Boolean> {

    private String url;

    @Override
    protected Boolean doInBackground(String... strings) {
        url = strings[0];
        URLConnection connection = null;
        boolean isImage = false;
        try {
            connection = new URL(url).openConnection();
            String contentType = connection.getHeaderField("Content-Type");
            isImage = contentType.startsWith("image/");

        } catch (IOException e) {
            e.printStackTrace();
        }
        return isImage;
    }

    @Override
    protected void onPostExecute(Boolean isImage) {
        try {
            if (isImage) {
                Intent intent = new Intent(PostDetailsActivity.this, FullScreenImageActivity.class);
                intent.putExtra("coverImage", url);
                startActivity(intent);
            } else {
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(intent);
            }
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            FirebaseCrash.report(new Exception(e.getMessage()));
        }

    }
}

我搜索了很多,我无法弄清楚。任何帮助将不胜感激。提前致谢。

0 个答案:

没有答案