【问题标题】:When do I call filepicker.setKey() if loading filepicker.io JavaScript in a non-blocking fashion?如果以非阻塞方式加载 filepicker.io JavaScript,我什么时候调用 filepicker.setKey()?
【发布时间】:2026-01-30 13:20:04
【问题描述】:

如果你做得太早,你会得到错误Uncaught ReferenceError: filepicker is not defined

我正在使用来自https://developers.filepicker.io/docs/web/ 的代码来加载它:

For advanced users, if you want to load the javascript in a non-blocking fashion, you can use this instead:

<script type="text/javascript">
(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); 
</script>

我不知道如何知道它何时加载,以便我可以调用 filepicker.setKey()。一种解决方法是在我每次使用文件选择器时调用它,但这似乎很蹩脚。

【问题讨论】:

  • 为什么我现在不能精细文件选择器

标签: filepicker.io


【解决方案1】:

非阻塞 js 在脚本加载时将所有调用排队,然后在脚本加载后执行这些调用。包含脚本标签后,您应该可以立即开始调用:

<script type="text/javascript">(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); </script>
<script>
filepicker.setKey('testing');
filepicker.pick()
</script>

http://jsfiddle.net/bbcbK/1/

【讨论】:

  • 啊,谢谢它的工作,很高兴知道那个 JS 块也做了什么!
  • 不工作的是将脚本标签放在结束正文标签之前(对于阻塞和非阻塞 JS):Copy and paste this script into your page just before the &lt;/body&gt; tag.。这会导致我在调用 pickAndStore 时重新加载我的页面,但我不会担心现在为什么会发生这种情况。
  • 对于未来的观众,我认为将加载器脚本放在