如何在 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 时反转颜色。
我是编码新手,现在需要一些帮助。 我使用 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 时反转颜色。