【问题标题】:Cordova Mobile: Web File API doesn't work correcltyCordova Mobile:Web 文件 API 无法正常工作
【发布时间】:2021-04-30 10:46:01
【问题描述】:

我们最近将 Cordova 应用程序迁移到 Capacitor。 我目前正在开发一个功能,它使用 Canvas blob 数据创建File (WebAPI),我们将其发送到 API。 但我注意到 Capacitor WebView 中的 File API 已过时且损坏:

在屏幕截图中,我正在使用 iOS 14.3 的 iPhone 8 上调试应用程序,您会注意到 File 的大小始终为零,并且 name 属性以某种方式保存了实际数据。 (e 是一个 Blob)。

第一个示例显示从 blob 创建文件,但之后文件大小为 0,名称为 BlobArray。

const e = blob;
new File([e], 'asdf', {type: e.type})

第二个示例显示了基本的MDN File 示例,它在 Chrome 和桌面 Safari 中运行良好,但在移动设备上它也使用字符串数组作为名称

new File(["foo"], "foo.txt", {
  type: "text/plain",
});

我也在 iOS Safari 浏览器中尝试过,效果很好。

因此,我不得不假设我们的 Capacitor App 使用的是过时的 Safari 版本。 不幸的是,我找不到任何有关如何为 Ionic/Capacitor 设置 WebView/Safari 版本的信息。

这是我的设置:

  • 设备:iPhone 8
  • iOS 版本:14.3
  • ionic 应用的用户代理:

Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148

  • iOS Safari 的用户代理:

Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.2 Mobile/15E148 Safari/604.1

包和版本:

    "@capacitor/cli": "2.4.6",
    "@capacitor/core": "2.4.6",
    "@capacitor/ios": "^2.4.6",
    "ionic": "^5.4.14",
    "@ionic/angular": "^5.4.1",
    "@ionic/angular-toolkit": "~2.0.0",
    "ionic-native": "^2.9.0",
    "@ionic-native/file-transfer": "^5.29.0",
    "cordova-plugin-file": "^6.0.2",

有没有办法为 WebView 设置 Safari 版本,或者这可能是我们配置错误的一些情况(因为迁移到电容器)?

【问题讨论】:

  • 您能分享一些创建 File 对象的代码吗?
  • @johnborges 感谢您的快速响应!我可以这样做,但这对解决问题没有帮助。屏幕截图已经显示了该问题的简约示例。如您所见,简约示例(取自 MDN)创建了一个大小错误且名称无效的文件。我将进行编辑以将示例也添加为代码并添加到 MDN 的链接。

标签: ios cordova ionic-framework capacitor fileapi


【解决方案1】:

我能想到的唯一有用的方法是尝试更改或更新到 @capacitor/ios 的不同版本。这个包是控制电容器使用的 webview 的一部分。我不认为有办法直接设置它。

我创建了一个使用"@capacitor/ios": "^2.4.5" 的虚拟项目并运行了您发布的第二个示例。对我来说效果很好。

【讨论】:

  • 我刚刚更新到2.4.6,但还是不行。所以问题可能出在其他地方(从科尔多瓦更新到电容器?)......我将设置一个干净的新项目并比较差异。感谢您的回答!
【解决方案2】:

通过查看调试器中的 File 原型,我注意到 File 构造函数完全不同。

我搜索了代码 sn-p,发现代码来自cordova-plugin-file package。 该插件会覆盖全局 File 变量。 因此 File Web API 不再可用。

通过删除插件(以及依赖它的插件),我们能够解决问题。

Github 相关问题:https://github.com/apache/cordova-plugin-file/issues/453

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 2018-08-15
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 2016-04-01
    相关资源
    最近更新 更多