Android 从资产文件夹加载CSS JS

Android 从资产文件夹加载CSS JS,android,html,Android,Html,我已经寻找了几个小时的解决方案;虽然也有类似的情况,但我认为我的情况有点不同。 我有一个网站,我正在加载到webview setContentView(R.layout.activity_main); WebView myWebView = (WebView) findViewById(webview); myWebView.loadUrl("http://my-website.com/index.php"); WebSettings webSettings =

我已经寻找了几个小时的解决方案;虽然也有类似的情况,但我认为我的情况有点不同。 我有一个网站,我正在加载到webview

    setContentView(R.layout.activity_main);
    WebView myWebView = (WebView) findViewById(webview);
    myWebView.loadUrl("http://my-website.com/index.php");
    WebSettings webSettings = myWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);

    myWebView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            view.loadUrl(request.toString());
            return true;
        }
    }); }
它正在加载网站。没有问题。我想做的是(因为有很多CSS和JS文件)从Android应用程序的资产文件夹加载这些文件-我想让页面加载更快

<link href="file:///android_asset/css/keyframes.css" rel="stylesheet" type="text/css">
<link href="file:///android_asset/css/materialize.min.css" rel="stylesheet" type="text/css">
<link href="file:///android_asset/css/swiper.css" rel="stylesheet" type="text/css">
<link href="file:///android_asset/css/swipebox.min.css" rel="stylesheet" type="text/css">
<link href="file:///android_asset/css/style.css" rel="stylesheet" type="text/css">

它目前没有加载任何以这种方式调用的CSS文件。 我真的不想用一个简单的问题来纠缠任何人,它只是一直困扰着我,我不擅长Java。
此外,这不是本地HTML页面。这是一个从远程服务器加载的PHP页面。

我不是一名移动开发人员,但我是一名web开发人员,为我的移动开发人员同事编写了一些webview页面

据我所知,您无法在webview中访问文件系统。但是,您可以让应用程序缓存css/js文件

viewer.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT)
(这是从stackoverflow上的此处开始)(这是)

通过使用默认缓存设置,CSS/JS文件将在第一次下载后缓存,就像在普通浏览器中缓存一样。因此,您可以简单地使用

<link href="https://your.domain/css/style.css" rel="stylesheet" type="text/css">


以实现更快的页面加载速度。

如果要从本地资产文件夹加载css和js,则首先需要下载网页,然后按以下方式进入web浏览器

使用以下方式下载数据:

public String getHtmlContent(String urlToLoad) {
        String outputStr = "";
        BufferedReader inputString = null;
        try {
            URL urlLoad = new URL(urlToLoad);
            inputString = new BufferedReader(new InputStreamReader(urlLoad.openStream()));
            String str;
            while ((str = inputString.readLine()) != null) {
                outputStr += str;
            }
        } catch (MalformedURLException e) {
        } catch (IOException e) {
        } finally {
            if (inputString != null) {
                try {
                    inputString.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return outputStr;
    }
然后,您需要将js和css文件放入资产文件夹中,然后需要在网页中定义url,如下所示

<script src="file:///android_asset/jquery.min.js" type="text/javascript"></script>

使用此函数在
WebView
中加载CSS和JavaScript: 在
WebViewClient
上的
onCreate()中同时注入CSS和JavaScript:

     webView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url)
        {
            injectJavaScript(view);
            injectCSS();

         }
创建两种方法来注入JavaScript和CSS(来自res/raw):

这对我来说很有吸引力。

使用
加载CSS将是一件非常有趣的事情。今天我在开发者控制台上收到了一条警告消息

这是因为在加载所有CSS之前,页面上不会呈现任何内容


因此,我们的建议是:;为页面的每个部分添加单独的样式表,这些样式表是从
调用的,而不是从

调用的。如果您临时将HTML的一个副本放入
资产/
并从那里加载到
网络视图
,它是否工作?
“文件://
。不应该是
”文件://
?请尝试。我也有同样的问题。没有加载任何文件@GreenApps资产中有一个
css
文件夹?如果希望获得真正的性能,请缓存输出并将输出放置在请求的确切位置。在不存在的文件上重写index.php后,编译完成一次,然后将输出写入/assets/asdugh3e9adHASH.css(/assets/asdugh3e9adHASH.css>index.php?path=$1)必须通过收集文件修改次数/文件名并对其进行散列来确定唯一标识符。这样,PHP甚至不会在加载现有资产集时执行。您也可以共享您的css文件吗?我只是想替换我的实际字体,它是通过webview中的url加载的。我只是在assets中添加了我自己的字体,并试图唤醒我自己的css,就像u一样,但我没有成功。请帮忙。
     webView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url)
        {
            injectJavaScript(view);
            injectCSS();

         }
    private boolean injectJavaScript(WebView view){
        view.loadUrl("javascript:(function() { " +
            "var head = document.getElementsByTagName('header')[0];"
            + "head.parentNode.removeChild(head);" + "console.log('true');"+
            "})()");
        view.loadUrl("javascript:(function() { " +
            "var footer = document.getElementsByTagName('footer')[0];"
            + "footer.parentNode.removeChild(footer);" +
            "})()");
        view.loadUrl("javascript:(function() { " +
            "var nav = document.getElementsByTagName('nav')[0];"
            + "nav.parentNode.removeChild(nav);" +
            "})()");
        view.loadUrl("javascript:(function() { " +
            "var set = document.getElementsByClassName('banner');"
            + "set[0].style.margin = '0px';" +
            "})()");
    return true;
    }
    private void injectCSS() {
    try {
        InputStream inputStream = getResources().openRawResource(R.raw.css);
        byte[] buffer = new byte[inputStream.available()];
        inputStream.read(buffer);
        inputStream.close();
        String encoded = Base64.encodeToString(buffer, Base64.NO_WRAP);
        wv1.loadUrl("javascript:(function() {" +
                "var parent = document.getElementsByTagName('head').item(0);" +
                "var style = document.createElement('style');" +
                "style.type = 'text/css';" +
                "style.innerHTML = window.atob('" + encoded + "');" +
                "parent.appendChild(style)" +
                "})()");

    } catch (Exception e) {
        e.printStackTrace();
    }
}