【发布时间】:2015-08-28 09:29:34
【问题描述】:
我正在开发一个代号为 one 的应用程序,用于离线查看报告,该报告采用 HTML 格式,资源包含在单独的文件夹中。应用程序下载 HTML 并复制 HTML 中引用的资源的文件夹结构。当我使用普通浏览器打开报告并将其指向“/.cn1”文件夹时,它会正确加载并显示。使用模拟器时,HTML 被加载到 Codename One Web Browser 对象中并显示(我可以看到报告的标题),只是 Web 浏览器没有加载任何资源。我还设置了文件夹的基本 URL。
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() 在设备上运行时为 null/""。尽管当这行代码在其他地方时,它变成了 about:page。 Report_2.html 的 HTML 是;
<!DOCTYPE html>
<html>
<head>
<title>Test Page</title>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
【问题讨论】:
-
您的 HTML 文件似乎无效并且缺少 html 标签。众所周知,移动浏览器对有效的 html 很敏感...
-
抱歉,这是从文件中手动复制的。真实文件有效。我已经编辑了答案以反映这一点。
-
当你写
[Folder Name]时,你并没有真正使用[Folder Name],对吧?您使用的是纯字母数字的有效名称,对吗? -
不,[Folder Name] 只是真实文件夹名称的占位符,是一个没有特殊字符的字母数字公司名称。
标签: html codenameone base-url