android - 将 Assets 文件夹中的本地 css/js 文件添加到远程网页

标签 android

我有一个加载远程网页的 Android webView。由于此页面的代码由一位同事控制,我可以要求他更改它,但我更愿意完全在客户端找到一个解决方案。

出于流量和性能的原因,我们希望将我们的 css 和 javascript 文件存储在客户端本地,而不是从服务器加载它们。

我想到了两个想法,但到目前为止都没有实现。

  1. 将所有文件存储在 Assets 文件夹中,并让 html 引用它们

    问题:webview 似乎不允许访问“file:///...” url

    问题:有没有办法解决这个问题?

  2. 只需忽略 html 中的所有这些引用,并在将所有这些文件加载​​到 webview 后注入(inject)所有这些文件

    问题:如何将这些文件 (.css/.js) 添加到我已加载的 html 中?

最佳答案

可以通过以下方式构建本地WebView

  • Activity (LocalWebviewActivity.java)
  • 布局 (activity_localwebview.xml)
  • Assets 文件夹(在“assets”文件夹的根目录下,创建文件夹“css”并将“style.css”放在这里)
  • 您引用 JS 文件的方式与引用 CSS 样式表的方式相同

LocalWebviewActivity.java

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;

public class LocalWebviewActivity extends Activity {

    WebView myWebView;
    StringBuilder mySBcontent;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_localwebview);

        myWebView = (WebView) findViewById(R.id.webkit);
        mySBcontent = new StringBuilder();

        mySBcontent.append("<html>");
        mySBcontent.append("<head>");
        mySBcontent.append("<link type='text/css' rel='stylesheet' href='css/style.css'>");
        mySBcontent.append("</head>");
        mySBcontent.append("<body>");
        mySBcontent.append("<h1>My Heading</h1>");
        mySBcontent.append("<p>My HTML content</p>");
        mySBcontent.append("<p><img style='width:150px;' src='myImg.png' /></p>");
        mySBcontent.append("</body>");
        mySBcontent.append("</html>");

        myWebView.loadDataWithBaseURL("file:///android_asset/", mySBcontent.toString(), "text/html", "UTF-8", "");
    }
}

activity_localwebview.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <WebView 
        android:id="@+id/webkit"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
</LinearLayout>

关于android - 将 Assets 文件夹中的本地 css/js 文件添加到远程网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15681389/

相关文章:

java - android从txt文件中删除已知行

java - 如何使用 Jackson 将复杂的 Json 对象序列化为 HTTP Get 的 QueryString?

java - 禁用 MultiDex Android Studio

android - Unity错误显示-没有连接Android设备

android - 模拟器不在按钮上显示图像单击android

android - 是否有工具可以根据当前工作目录使用 SHA 创建 repo list 文件?

java - 如何将 EditText 框输入限制为小数点后两个字符?

android - 如何将我的 Android 应用程序添加到共享对话框?

android - Xamarin Droid App 启动时出现 NullReferenceException

android - 禁用 ListView 中的项目