【问题标题】:android webview emulator not loading images and javascriptandroid webview模拟器不加载图像和javascript
【发布时间】:2015-11-12 04:08:24
【问题描述】:

我在 assets 文件夹中有 HTML 文件,并试图在 android webview 中加载它。没有应用 css 样式,也没有应用 javascript,也没有加载图像。 这是活动代码:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WebView ctWebView = (WebView) findViewById(R.id.ctWebview);
        ctWebView.getSettings().setDomStorageEnabled(true);
        ctWebView.getSettings().setJavaScriptEnabled(true);
        ctWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        ctWebView.setWebChromeClient(new WebChromeClient());
        ctWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }

            @Override
            public void onLoadResource(WebView view, String url) {
                super.onLoadResource(view, url);
                Log.e("resource",url);
            }
        });
        ctWebView.loadUrl("file:///android_asset/creditrackerhtml.html");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
}

这是布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:paddingLeft="@dimen/activity_horizontal_margin"
                android:paddingRight="@dimen/activity_horizontal_margin"
                android:paddingTop="@dimen/activity_vertical_margin"
                android:paddingBottom="@dimen/activity_vertical_margin"
                tools:context=".MainActivity">

    <WebView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/ctWebview"></WebView>

</RelativeLayout>

HTML 文件太大,无法在此处粘贴,但我已将日志放在 public void onLoadResource(WebView view, String url) 中,并看到正确的资源 url 被命中。 是在下载资源之前加载了webview吗?不知道如何解决这个问题

【问题讨论】:

  • 请检查您的 logcat。它应该提供一些关于未正确设置的信息。如果这里有什么最好发帖。
  • 我在 logcat 中没有看到任何问题,它正在访问资源 URL,但在加载资源之前已经加载了 webview
  • 您确定需要加载的资源正确链接到 HTML 文件吗?路径必须是相对的。
  • 我有一个基本标签,如 creditscore.capitalone.com/web"> 并且图像已加载

    正在加载...

  • 在我猜测之前,您应该检查并确认 Android WebView 是否支持该标签。

标签: android webview


【解决方案1】:

把你的文件放在 assets 文件夹中。

转到项目 > 应用程序 > src > 主 > 右键单击​​ > 新建 > 文件夹 > 资产文件夹。将其命名为资产。

要访问文件,请使用 getAssets().open(filename.txt)

要将文件转换为 URL,请使用 file.toURI() 或 file.toURI().toURL()。

此外,您不需要太多加载 url。只需使用 webView.loadUrl(url);

如果您有链接,请使用:

        //So links stay inside webview
    webview.setWebViewClient(new WebViewClient());

    webview.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                WebView webView = (WebView) v;

                switch (keyCode) {
                    case KeyEvent.KEYCODE_BACK:
                        if (webView.canGoBack()) {
                            webView.goBack();
                            return true;
                        }
                        break;
                }
            }

            return false;
        }
    });

【讨论】:

    【解决方案2】:

    你试过loadDataWithBaseURL()吗?

    webView.loadDataWithBaseURL(url, 
            data,
            "text/html",
            "utf-8",
            null);
    

    因为根据official documentation

    loadDataWithBaseURL() 将给定的数据加载到此 WebView 中,使用 baseUrl 作为基本 URL 为内容。基本 URL 用于解析相对 URL 以及在应用 JavaScript 的同源策略时。 historyUrl 是 用于历史记录。

    【讨论】:

    • 我已经尝试过了,并使用了远程调试器并看到错误消息无法加载 CSS、图像和 JS 的资源。但是这些 URL 也可以从模拟器的浏览器中访问。这些是 https 资源
    【解决方案3】:

    HTML 中的 CSS 和图像应使用相对于资产目录的 URL,或使用网络上的绝对路径。

    【讨论】:

      猜你喜欢
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多