如何在 android 中的 MHTML 文件上应用 javaScript 函数?

How to apply a javaScript function on MHTML files in android?

我是编码新手,现在需要一些帮助。 我使用 saveWebArchive() 方法保存我的 webView 内容,该方法在 kitkat 及以上方法中将 webView 保存为 mhtml 格式。这是我的代码,我对这部分没有任何问题:

File internalStorage = getApplication().getDir("MyArchive",Context.MODE_PRIVATE);
File webUrlPath = new File(internalStorage.getAbsolutePath());
String urlFileName = webUrlPath.toString();

html_path = urlFileName + File.separator + article.Articlehtml.hashCode() +
                    ".mht";
webView.saveWebArchive(html_path);

当我想在 webView 中加载已保存的文件时,我使用 Javascript 更改字体颜色,对于较低的 kitkat,它可以完美地工作,但对于 kitkat 及更高版本,更改将不适用。这是我遇到问题的另一部分代码:

webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setDatabaseEnabled(true);
webView.getSettings().setJavaScriptEnabled(true);

File file = new File(html_path);
//for Kitkat and above
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
            webView.loadUrl("file:///" + file);
    }
    else {
          String rawData = null;
          try {
               rawData = getStringFromFile(html_url);
          }catch (Exception e){
                //e.printStackTrace();
            }
 webView.loadDataWithBaseURL(null, rawData,"application/x-webarchive-xml","UTF-8", null);
        }

  webView.setWebViewClient(new WebViewClient(){
  public void onPageFinished(WebView view, String url){
         view.setBackgroundColor(Color.parseColor("#212121"));
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {        webView.evaluateJavascript("document.body.style.setProperty(\"color\", \"white\");", null);
    } else {
      webView.loadUrl("javascript:document.body.style.setProperty(\"color\", \"white\");");
} 

我希望为 kitkat 及以上版本的已保存 webView 内容应用 javaScript,这意味着我可以在将 mhtml 文件加载到 WebView 后更改它的字体颜色。

感谢您的关注。

对于低 19 API,您可以使用 webArchiveReader(在 GitHub 中查看)。对于 KitKat 及以上版本,只需在 webView 中加载文件,但 mht 格式不支持 JavaScript.

终于,我找到了解决问题的方法。它使用 ColorMatrixColorFilter 在加载 webView 时反转颜色。