私はまったく同じ問題を抱えていましsetTimeout()たsetInterval()。
Ink 自体がdocsで優れたノンブロッキング スクリプトを提供しており、完全にロードされるまですべてのファイルピッカー呼び出しをキューに入れ、呼び出された順に実行します。これがどのように機能するかです:
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 に貼り付けるだけです。
loadpicker.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)
};
これがうまくいくことを願っています!