使用App Inventor在WebView中实现本地Html,输入无效

Implement local Html in WebView with App Inventor, it doesn't work input

使用 App Inventor 在 WebView 中实现本地 Html。

Local HTML in App Inventor

当我尝试使用 "input" 在手机中选择图像时,没有反应...

<html >
  <head>
    <meta charset="UTF-8">

<input type="file" id="fileElem" multiple accept="image/*" style="display:none" onchange="handleFiles(this.files)">
<a href="#" id="fileSelect">Pick some files</a> 

<script type="text/javascript">

  window.URL = window.URL || window.webkitURL;

var fileSelect = document.getElementById("fileSelect"),
    fileElem = document.getElementById("fileElem"),
    fileList = document.getElementById("fileList");

fileSelect.addEventListener("click", function (e) {
  if (fileElem) {
    fileElem.click();
  }
  e.preventDefault(); // prevent navigation to "#"
}, false);
  
</script>

我在 App Inventor 中使用 WebView。 Html 是本地文件。 我只能在与主 html 文件相同的目录中使用样式表和库。

无法使用 webviewer 组件在 App Inventor 中选择文件。

webviewer 不是完整的浏览器,您不能像这样选择文件。为此,您必须使用 activity starter,例如 How to pick a file from SD card.

顺便说一句。通常,您可以将样式表和库与 webviewer...

一起使用

如果您使用 html 文件,包括 js 和 css 文件,它们使用目录结构, 您有 2 个选择:

  1. 将所有文件上传到您的应用程序的资产中,并修改所有 html、js 和 css 文件中的所有路径以使用该主目录,
  2. 或者(可能更容易)将您的项目(aia 文件)下载到您的计算机上,进行备份以防万一(您知道始终建议备份......)使用 7zip 打开它,将完整的目录结构拖到子目录中assets,保存修改后的工程(aia文件),上传修改后的工程到App Inventor

我使用的解决方案包括

  1. 使用 Image Picker 到 select Android 磁盘上的本地图像,
  2. 使用 upload
  3. 的 API 端点将其上传到 Dropbox
  4. 使用 API 创建一个 shareable link 到 Dropbox 上的文件,然后
  5. 将此 link 修改为仅托管在 Dropbox 上的图片,最后
  6. 将 URL 作为 WebViewString 传递,以便在 HTML 中使用图像标签与 WebViewer 组件一起显示。

这需要一个 Dropbox 帐户和 API 密钥。我不能说在您的特定用例中是否值得所有这些努力,它在我的情况下有效。我使用了来自@Taifun 的 this 示例来上传图像并添加了我自己的修改以获得可共享 link 并在 WebViewer 中呈现。

我假设您熟悉 APIs 以及如何使用它们。如果你决定走这条路,我建议先在 Postman 或 Insomnia 中测试端点。一旦获得正确的响应(状态 200),请按照示例使用 Web 组件的 POST 文件方法在 AppInventor 中实现 API 调用。

希望这对您有所帮助。如果有不清楚的地方,请告诉我,我会添加更多注释。