【发布时间】: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