android webview模拟器没有加载图像和JavaScript

时间:2015-08-19 02:39:10

标签: android webview

我在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视图,String url)中,并且已经看到正在点击正确的资源URL。 在下载资源之前是否正在加载webview?不知道如何解决这个问题

3 个答案:

答案 0 :(得分:0)

将您的文件放在资源文件夹中。

转到项目&gt; app&gt; src&gt;主要&gt;右键单击&gt;新&gt;文件夹&gt;资产文件夹。将其命名为资产。

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

使文件到URL使用file.toURI()或file.toURI()。toURL()。

此外,您不需要太多加载网址。只需使用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;
        }
    });

答案 1 :(得分:0)

您是否尝试过loadDataWithBaseURL()

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

因为根据official documentation

  

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

答案 2 :(得分:0)

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