我正在開發Codename中的應用程序,用於查看離線報告,這些報告以HTML格式進行,資源包含在單獨的文件夾中。該應用程序下載HTML並複製資源的文件夾結構,因爲它們是在HTML中引用的。當我用普通瀏覽器打開報告並將其指向「/.cn1」文件夾時,它會正確加載並顯示。在使用模擬器時,HTML被加載到Codename One Web瀏覽器對象中並顯示出來(我可以看到報告的標題),這只是Web瀏覽器沒有加載任何資源。我也將基本URL設置爲該文件夾。Codename One WebBrowser從FileSystemStorage中加載HTML
WebBrowser wbBrowser = (WebBrowser) findByName("WebBrowser", f);
FileSystemStorage fs = FileSystemStorage.getInstance();
wbBrowser.setPage(getTextFromFile(fs.getAppHomePath() + "/Reports/Report_2.html"), fs.getAppHomePath() + "/Reports/Report_2_files_files");
這是我目前使用的代碼。在報表查看器窗體顯示後運行。我已經在Android Lollipop中的默認瀏覽器和Mozilla Firefox Android應用程序中打開了報告,並且它顯示了包含所有圖像和CSS的網頁,因此我不確定它是否是代碼名稱一個安全問題。任何想法將不勝感激。
編輯:我試圖簡化應用程序,我只是運行下面的代碼;
WebBrowser wbBrowser = (WebBrowser) findByName("WebBrowser", Display.getInstance().getCurrent());
FileSystemStorage fs = FileSystemStorage.getInstance();
fs.mkdir(fs.getAppHomePath() + "[Folder Name]");
Util.downloadUrlToFile("http://[IpAddress]/mobile/admin/Report_2.html", fs.getAppHomePath() + "[Folder Name]/Report_2.html", true);
if (FileSystemStorage.getInstance().exists(fs.getAppHomePath() + "[Folder Name]/Report_2.html") == true) {
wbBrowser.setURL(fs.getAppHomePath() + "[Folder Name]/Report_2.html");
Dialog.show("Success", "File has been downloaded and shown as " + wbBrowser.getTitle(), "Ok", "");
}
else {
Dialog.show("Failiure", "File has not been downloaded", "Ok", "");
}
當運行Android Lollipop的設備上運行時,會顯示成功對話框,儘管我在設備上運行搜索時沒有找到他們(我不知道在哪裏代號爲一個存儲文件的存儲位置)。沒有其他代碼在設備上的任何地方運行,但是當將HTML文檔自己存儲在設備上並使用硬編碼引用(即/Storage/emulated/0/Android/data/Report_2.html
)時,我已經取得了成功。 wbBrowser.getTitle()在設備上運行時爲空/「」。儘管當這行代碼在其他地方時,它變成了:頁面。 Report_2.html的HTML是;
<!DOCTYPE html>
<html>
<head>
<title>Test Page</title>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
它看起來像你的HTML文件是無效的,並且缺少html標籤。移動瀏覽器對有效的html非常敏感...... –
道歉,這是手工從文件手中複製的。真實的文件是有效的。我編輯了答案來反映這一點。 –
當你寫'[文件夾名稱]'時,你不會真正使用'[文件夾名稱]'吧?您使用純粹字母數字的有效名稱嗎? –