已安装cordova-plugin-file的Cordova中使用W3C File对象的方法及疑问
解决cordova-plugin-file覆盖W3C File构造函数的问题
针对你遇到的问题,这里有两种可行的解决方案,分别对应“不修改插件访问原生File”和“修改插件重命名构造函数”的需求:
方法一:不修改插件,提前保存原生W3C File构造函数
cordova-plugin-file会在加载时覆盖全局的window.File,但你可以在插件加载之前先把原生的File构造函数保存到一个自定义变量中,之后就能随时调用它了:
- 在你的项目入口文件(比如
index.html)的最顶部添加一段脚本,确保它在cordova框架和插件加载前执行:// 提前保存原生W3C标准的File构造函数 window.W3CFile = window.File; - 之后在需要创建标准File对象的地方,直接使用
W3CFile即可:// 创建一个符合W3C标准的File对象 const myStandardFile = new W3CFile(["file content"], "test.txt", { type: "text/plain" });
这个方法不需要修改任何插件代码,简单高效,而且不会影响cordova-plugin-file的正常使用。
方法二:修改cordova-plugin-file源码,重命名其File构造函数
如果你希望彻底区分原生和插件的File构造函数,可以修改插件源码,把它的构造函数重命名为FileCordova:
- 找到你项目中cordova-plugin-file的源码目录,通常路径是
plugins/cordova-plugin-file/www/File.js - 打开
File.js文件,找到定义插件File构造函数的代码块(通常是类似下面的结构):window.File = function(name, localURL, nativeURL, type, lastModified) { // 插件内部的实现逻辑 // ... }; - 把
window.File改成window.FileCordova:window.FileCordova = function(name, localURL, nativeURL, type, lastModified) { // 保留原有的实现逻辑 // ... }; - 检查文件中其他引用该构造函数的地方,比如插件内部的
FileEntry相关代码,确保所有插件内的调用都改为FileCordova(比如如果有return new File(...)的语句,要改成return new FileCordova(...)) - 如果文件末尾有模块导出的代码(比如
module.exports = File;),也要同步修改为module.exports = FileCordova; - 最后重新构建你的cordova项目,运行
cordova prepare或cordova build让修改生效
修改完成后,你就可以同时使用原生的File(W3C标准)和插件的FileCordova了,两者互不干扰。
注意:修改插件源码后,如果以后更新cordova-plugin-file,你的自定义修改会被覆盖。建议把修改后的插件保存为本地自定义版本,或者使用cordova钩子脚本在每次构建时自动应用修改。
内容的提问来源于stack exchange,提问作者Abhishek Kumar
相关产品推荐
相关产品推荐

