我遇到了完全相同的问题,对我来说,既没有将它包装在 asetTimeout()
也没有setInterval()
工作。
Ink 自己在他们的文档中提供了一个很棒的非阻塞脚本,它将所有文件选择器调用排队,直到它完全加载,然后按照它们被调用的顺序执行它们。这是它的工作原理:
mrt remove filepicker
(如果添加)
mrt remove loadpicker
(如果添加)
- 创建新文件
/lib/filepicker.js
/lib/filepicker.js
if (Meteor.isClient) {
(function(a) {
if (window.filepicker) {
return
}
var b = a.createElement("script");
b.type = "text/javascript";
b.async = !0;
b.src = ("https:" === a.location.protocol ? "https:" : "http:") + "//api.filepicker.io/v1/filepicker.js";
var c = a.getElementsByTagName("script")[0];
c.parentNode.insertBefore(b, c);
var d = {};
d._queue = [];
var e = "pick,pickMultiple,pickAndStore,read,write,writeUrl,export,convert,store,storeUrl,remove,stat,setKey,constructWidget,makeDropPane".split(",");
var f = function(a, b) {
return function() {
b.push([a, arguments])
}
};
for (var g = 0; g < e.length; g++) {
d[e[g]] = f(e[g], d._queue)
}
window.filepicker = d
})(document);
filepicker.setKey(YOUR_FILEPICKER_KEY);
}
此客户端代码是从https://developers.inkfilepicker.com/docs/web/获取的非阻塞加载程序的香草版本。使用它,您可以设置一次密钥,然后根据需要使用文件选择器,而不必担心它是否已经加载。
当然你也可以用这个来修改 loadpicker,只需将这段代码粘贴到你的 loadpicker.js 中
加载选择器.js
loadPicker = function(key) {
(function(a) {
if (window.filepicker) {
return
}
var b = a.createElement("script");
b.type = "text/javascript";
b.async = !0;
b.src = ("https:" === a.location.protocol ? "https:" : "http:") + "//api.filepicker.io/v1/filepicker.js";
var c = a.getElementsByTagName("script")[0];
c.parentNode.insertBefore(b, c);
var d = {};
d._queue = [];
var e = "pick,pickMultiple,pickAndStore,read,write,writeUrl,export,convert,store,storeUrl,remove,stat,setKey,constructWidget,makeDropPane".split(",");
var f = function(a, b) {
return function() {
b.push([a, arguments])
}
};
for (var g = 0; g < e.length; g++) {
d[e[g]] = f(e[g], d._queue)
}
window.filepicker = d
})(document);
filepicker.setKey(key)
};
希望这对你有用!