[英]How to extract main text from website and exclude archive and link to other webpage using JSOUP
[英]How to save webpage as web archive and then display the web archive as a webpage using Android's WebView?
我正在Android Studio 3.0.1,Xubuntu 16.04 LTS中開發一個Android應用程序,使用WebView作為包含HTML,CSS,JavaScript / jQuery並使用PHP / MySQL作為后端的響應式Web應用程序的包裝。 幾乎所有內容都按預期工作:頁面完全呈現,JavaScript運行,並且sign-up / login / news-feed系統按預期工作。
但是,現在我想實現某種簡單的緩存系統,以便在沒有Internet連接時用戶仍可以看到頁面的最新可用版本。
截至目前,我已經設法檢測是否存在Internet連接。 如果沒有連接,WebView將顯示一個本地“錯誤”頁面,該頁面存儲在應用程序文件中-比默認的Android“連接錯誤”屏幕要好,但用戶仍然無法從該頁面看到圖像和文本。離線時的動態消息,例如在Facebook應用中。
我嘗試過的方法(Java / Android Studio):
當用戶打開應用程序(onCreate)時 :
如果沒有連接,請檢查要檢索的頁面的本地保存版本。 如果存在連接,則下次將頁面另存為.mht文件:
if (!isConnected()) { try { File file = new File(getFilesDir(), FilenameUtils.getBaseName(url)); webView.loadUrl("file://" + file.getAbsolutePath() + ".mht"); } catch (Exception e) { Toast.makeText(getApplicationContext(), "Exception detected", Toast.LENGTH_LONG).show(); } } else { try { File file = new File(getFilesDir(), FilenameUtils.getBaseName(url)); webView.loadUrl(url); webView.saveWebArchive("file://" + file.getAbsolutePath() + ".mht"); } catch (Exception e) { Toast.makeText(getApplicationContext(), "Exception detected", Toast.LENGTH_LONG).show(); } }
我嘗試將webView.saveWebArchive()
用於不同的路徑,包括簡單的/path/to/file
, file:///path/to/file
等,但均無濟於事。 我最接近在WebView上顯示內容的是一堆原始MHTML,但顯然它並未呈現。 我還得到了“找不到文件”屏幕和純白屏幕,上面沒有任何內容。
如何正確地將WebView中的網頁保存到Web存檔中,然后從本地存儲中檢索並再次顯示為網頁?
編輯:
正如greenapps在評論中所建議的那樣,我覆蓋了WebViewClient中的“ onPageFinished”方法,並在其中調用了“ saveWebArchive()”:
@Override
public void onPageFinished(WebView view, String link) {
view.saveWebArchive(path);
showMsg("Finished loading");
}
當電話連接到Internet並加載主頁時,它確實顯示“完成加載”。 關閉應用程序后,斷開連接並再次打開它,它現在顯示的背景為空白,具有原始頁面的顏色,沒有更多的白色頁面或錯誤消息。 但是,沒有任何圖像,文字或任何東西。
這里的問題是,您需要等待頁面完成加載,然后再嘗試將其保存到存檔中。
webView.loadUrl(url);
webView.saveWebArchive(path);
由於該頁面尚未完全加載,因此無法使用。 因此,您僅在頁面完成時才需要覆蓋WebViewClient中的“ onPageFinished”方法以保存存檔:
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
if (isConnected()) {
try {
Thread.sleep(2000);
view.saveWebArchive(path_to_saveDir);
} catch (InterruptedException e) {
Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}
});
請注意,我使用Thread.sleep(2000)
是因為頁面加載時有一個jQuery動畫,因此它要等待2秒鍾才能完成動畫,然后保存Web存檔。
webView.loadUrl(url);
webView.saveWebArchive("file://" + file.getAbsolutePath() + ".mht");.
您無法在此處保存頁面。
太早了。
該頁面尚未加載。
在onPageLoaded()或onPageFinished()中進行操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.