【问题标题】:Webview android couldn't load HTML5Webview android无法加载HTML5
【发布时间】:2019-11-26 04:02:37
【问题描述】:

我的 Android 应用升级到 API 29,所以我们需要从 Xwalkcorelibrary 更改为 WebView,当应用运行时可以显示 HTML5 但此页面的内容不显示。

使用WebView时:

    setContentView(R.layout.bookshelf_view);
    mWebView = findViewById(R.id.web_view);
    mWebView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            view.loadUrl(request.getUrl().toString());
            return true;
        }
    });
    try {
        WebSettings webSettings = mWebView.getSettings();
        webSettings.setUserAgentString(webSettings.getUserAgentString() + " " + AndroidCore.getInstance().getApiVersion());
        webSettings.setJavaScriptEnabled(true);
        webSettings.setDomStorageEnabled(true);
        webSettings.setAllowUniversalAccessFromFileURLs(true);
        webSettings.setAppCacheEnabled(true);
    } catch (Exception e) {
        e.printStackTrace();
    }
    mWebView.loadUrl("file:///android_asset/HTML5/index.html");

当使用 Xwalkcorelibrary 时:

 try {
        Method getBridge = XWalkView.class.getDeclaredMethod("getBridge");
        getBridge.setAccessible(true);
        XWalkViewBridge xWalkViewBridge = null;
        xWalkViewBridge = (XWalkViewBridge) getBridge.invoke(mXwalkView);
        XWalkSettings webSettings = xWalkViewBridge.getSettings();
        webSettings.setUserAgentString(
                webSettings.getUserAgentString() + " " + AndroidCore.getInstance().getApiVersion());
        webSettings.setJavaScriptEnabled(true);
        webSettings.setAllowUniversalAccessFromFileURLs(true);
        webSettings.setAppCacheEnabled(true);
    } catch (Exception e) {
        e.printStackTrace();
    }

    mXwalkView.setResourceClient(new MyResourceClient(mXwalkView));
    mXwalkView.setUIClient(new MyUIClient(mXwalkView));
    this.configureWebView();
    mXwalkView.loadAppFromManifest("file:///android_asset/manifest.json", null)

那么我做错了什么?请帮我找出解决方案?

【问题讨论】:

  • 你在清单文件中添加了`android:networkSecurityConfig="@xml/network_security_config"`这个吗?
  • 我也尝试了你的建议,但仍然无法帮助我!

标签: android android-webview xwalkview


【解决方案1】:

你试过这样吗?它在我的项目中对我有用:

WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);

    WebViewClientImpl webViewClient = new WebViewClientImpl(this);
    webView.setWebViewClient(webViewClient);


    webView.loadUrl("URL");

拦截 WebView HTTP 请求

public class WebViewClientImpl extends WebViewClient {

private Activity activity = null;

public WebViewClientImpl(Activity activity) {
    this.activity = activity;
}

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if(url.indexOf("jenkov.com") > -1 ) return false;

    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
    activity.startActivity(intent);
    return true;
}

@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
    if(url.startsWith("http://tutorials.jenkov.com/images/logo.png")){
        String mimeType = "image/png";
        String encoding = "";
        InputStream input = ...;


        WebResourceResponse response =
                new WebResourceResponse(mimeType, encoding, input);

        return response;
    }

    return null;
}
}

在 HTML 5 本地存储中缓存值

WebSettings webSettings = webView.getSettings();

webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);

【讨论】:

  • 哦!非常感谢 !我可以加载整页 HTML5。
【解决方案2】:

将android:hardwareAccelerated="true" 添加到您的清单文件中。有时 webview 无法加载视频和 iframe hardwareAccelerated。

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" 
        android:hardwareAccelerated="true">

您也可以尝试更改文件 url -

尝试改变这个 - mWebView.loadUrl("file:///android_asset/HTML5/index.html");

到 mWebView.loadUrl("file:///android_asset/index.html");

【讨论】:

  • 该属性 android:hardwareAccelerated="true" 之前已添加到我的 AndroidManifest 中,您请求我的链接“file:///android_asset/index.html”不完全正确。感谢您的帮助!
  • 我建议您 - 尝试将 index.html 文件位置 android_asset/HTML5 目录更改为 android_asset 文件夹。
  • 非常感谢!我可以加载整页
猜你喜欢
  • 1970-01-01
  • 2019-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 2017-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多