Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';在Javascript中,将被覆盖的本机对象还原为原始对象的最佳方法是什么?_Javascript_Meteor_Cordova Plugins_Filepicker.io - Fatal编程技术网

什么';在Javascript中,将被覆盖的本机对象还原为原始对象的最佳方法是什么?

什么';在Javascript中,将被覆盖的本机对象还原为原始对象的最佳方法是什么?,javascript,meteor,cordova-plugins,filepicker.io,Javascript,Meteor,Cordova Plugins,Filepicker.io,我发现cordova插件文件会覆盖对象,这样它就可以在幕后做一些有趣的事情。这在Cordova中通常很好,但我还发现FileStack(我的项目的另一个依赖项)确实需要本机文件对象。我还碰巧使用Meteor 1.6从相同的代码库构建了我的Cordova/Web应用程序 在我的用例中,当Filestack运行其.pick()方法时,我需要临时将文件对象还原回本机 我目前的解决方案是创建一个新的iFrame,将文件重新分配给原始文件,删除iFrame,运行Filestack的.pick()方法,然后

我发现cordova插件文件会覆盖对象,这样它就可以在幕后做一些有趣的事情。这在Cordova中通常很好,但我还发现FileStack(我的项目的另一个依赖项)确实需要本机
文件
对象。我还碰巧使用Meteor 1.6从相同的代码库构建了我的Cordova/Web应用程序

在我的用例中,当Filestack运行其
.pick()
方法时,我需要临时将
文件
对象还原回本机

我目前的解决方案是创建一个新的iFrame,将
文件
重新分配给原始文件,删除iFrame,运行Filestack的
.pick()
方法,然后恢复cordova插件文件的
文件
对象以恢复正常操作

function setOrigFileObject() 
{
    let iframe = document.createElement('iframe');
    iframe.src = 'javascript:;';
    iframe.style.display = 'none';

    document.body.appendChild(iframe);

    window.FILE_CORDOVAPLUGINFILE = File;
    window.FILE_NATIVE = iframe.contentWindow.File;
    File = window.FILE_NATIVE;

    document.body.removeChild(iframe);
}
这似乎很有效,但我觉得这不是最好的解决方案。首先,添加一个全新的浏览器框架对于仅仅访问一个已经是作用域一部分的对象来说感觉非常糟糕


有没有一种方法可以在不创建iFrame的情况下获取本机
文件
对象

在cordovas插件启动之前,您是否尝试存储/备份原始
文件
对象?类似于
constfileoriginal=File
并且一旦cordova触发其ready事件,您就可以存储
const FileCordova=File。这将使您能够访问这两种变体。好奇。我想了想,但我不知道我是否可以在Cordova插件初始化之前运行任何东西,而不创建竞争条件(或者分叉插件,这可能会让我损失可维护性)。你知道我是如何做到这一点的吗?一种方法可能是,只有在你完成准备之后,才能加载
cordova.js
。因此,保存FileOriginal,然后添加脚本标记,将cordova.js加载到page.Hmm。我会调查的。这有点复杂,因为我在Meteor中运行,可能对运行时没有太多的控制,但我会研究一下,看看是否可以在cordova.js和/或插件初始化之前进行连接。这对我的特定用例不起作用(如果不分叉Meteor存储库),所以看起来我可能会坚持使用iFrame。但是,在运行时,在文档的
中的
标记中,在任何依赖项之上设置此选项,在几乎任何其他情况下都会起作用!在cordovas插件启动之前,您是否尝试存储/备份原始
文件
对象?类似于
constfileoriginal=File
并且一旦cordova触发其ready事件,您就可以存储
const FileCordova=File。这将使您能够访问这两种变体。好奇。我想了想,但我不知道我是否可以在Cordova插件初始化之前运行任何东西,而不创建竞争条件(或者分叉插件,这可能会让我损失可维护性)。你知道我是如何做到这一点的吗?一种方法可能是,只有在你完成准备之后,才能加载
cordova.js
。因此,保存FileOriginal,然后添加脚本标记,将cordova.js加载到page.Hmm。我会调查的。这有点复杂,因为我在Meteor中运行,可能对运行时没有太多的控制,但我会研究一下,看看是否可以在cordova.js和/或插件初始化之前进行连接。这对我的特定用例不起作用(如果不分叉Meteor存储库),所以看起来我可能会坚持使用iFrame。但是,在运行时,在文档的
中的
标记中,在任何依赖项之上设置此选项,在几乎任何其他情况下都会起作用!