如果以非阻塞方式加载filepicker.io JavaScript,我何时调用filepicker.setKey()?

时间:2013-04-03 09:14:30

标签: filepicker.io

如果您过早地执行此操作,则会收到错误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时调用它,但这看起来很蹩脚。

1 个答案:

答案 0 :(得分:3)

非阻塞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/

相关问题