在 Android 中从 HTML 引用本地文件

Referencing local files from HTML in Android

提问人:Bardo 提问时间:10/5/2023 更新时间:10/5/2023 访问量:123

问:

我有一个非常简单的 HTML 应用程序,它使用几个 js 文件、一个 css 和几个图像。我将它们全部捆绑在一个文件夹中,该文件夹下载到我的手机的“下载”文件夹中。

现在,当我转到该文件夹并打开主 html 文件时,它会在 Chrome 浏览器中以以下 URL 打开:content://media/external/file/<10 位数字>并且没有加载本地引用的其他文件。这意味着没有图像,当然也没有js功能。

我应该把我的文件放在哪里,或者我应该如何从主html文件中引用它们,以实现正常的操作过程,在执行主HTML文件时,这些文件通常是加载的?

我知道我可以下载一个小型 Web 服务器在本地运行它并让它为页面提供服务,但这对我来说似乎有点矫枉过正,我想把它作为最后的选择。

javascript android html 本地 相对路径

评论

0赞 Afzal K. 10/5/2023
您是否尝试过绝对路径、相对路径或协议?file://
0赞 Bardo 10/5/2023
@AfzalK。我也尝试过使用 file:// 和 file:/// 进行访问,但 html 无法以这种方式加载。我的html文件上有相对路径,我会放置绝对路径,但我不知道必须将它们放在哪里,因为当我打开文件时浏览器中的网址会发生变化。
0赞 Afzal K. 10/5/2023
您可以在文件的详细信息中查看

答:

-1赞 Lahiru Anushka 10/5/2023 #1
  1. 将文件移至其他位置:将 HTML 文件和所有相关资源(CSS、JavaScript、图像)移至设备上的其他文件夹,例如“文档”或“内部存储”文件夹。然后尝试从那里打开 HTML 文件。从这些位置访问文件时,浏览器的安全限制可能较少。

  2. 使用相对路径访问文件: 确保使用 HTML 文件中的相对路径引用 CSS、JavaScript 和图像文件。例如,如果 HTML 文件与 CSS 文件位于同一文件夹中,请使用类似 的相对路径。<link rel="stylesheet" href="style.css">

  3. 使用文件 URI 方案:您可以尝试使用 URI 方案来访问 HTML 文件和资源。例如,通过在 Chrome 浏览器的地址栏中键入来打开 HTML 文件。请务必替换为 HTML 文件的实际路径。file:///file:///path/to/your/file.html/path/to/your/

  4. 浏览器设置:检查移动设备上 Chrome 浏览器的设置。可能有一个选项可以允许本地文件访问或禁用本地文件的安全限制。这些设置可能因浏览器和版本而异。

  5. 第三方应用程序:Google Play 商店中提供了第三方文件管理器应用程序和 HTML 查看器,可让您更轻松地使用本地资源打开 HTML 文件。这些应用可能会更好地处理本地文件访问。

如果这些选项都不起作用,您可能需要考虑使用本地 Web 服务器作为最后的手段,如前所述。这是在本地提供 HTML 应用程序及其资源的可靠方式,可确保一切按预期工作,而无需处理浏览器限制。

0赞 blackapps 10/5/2023 #2

您将文件放在合适的文件夹中。

问题在于您使用的内容方案 uri 也隐藏了真实文件名。

content://media/external/file/123456

指向您的 HTML 文件。如果浏览器必须显示类似图像的图片.jpg它将构建一个类似 content://media/external/file/image.jpg 的 uri。

但这不是有效的 uri,因为该提供程序使用您告诉我们的数字。即使 url 没问题,您也不会拥有它的读取权限。

评论

0赞 Bardo 10/5/2023
有什么解决方法可以解决这个问题吗?
0赞 blackapps 10/5/2023
似乎您根本没有 Android 应用程序。只有一个包含一些html文件等的文件夹。右?
0赞 Bardo 10/5/2023
没错,带有 JS 的普通 HTML
0赞 blackapps 10/5/2023
所以这不是编程问题。您正在访问一个站点,以解决编程问题。
0赞 blackapps 10/5/2023
带有相对路径的html是可以的。安装一个简单的 Web 服务器,如 SimpleHttpServer。它需要MANAGE_EXTERNAL_STORAGE权限,因此它具有所有文件访问权限并可以浏览到您的文件夹。这一点也不矫枉过正。