Android 从资产文件夹加载CSS JS
我已经寻找了几个小时的解决方案;虽然也有类似的情况,但我认为我的情况有点不同。 我有一个网站,我正在加载到webviewAndroid 从资产文件夹加载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 =
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();
}
}