我的页面上有一个模式对话框,当用户与页面进行某些交互时会弹出该对话框。


我使用React并使用webpack创建了一个整洁的小包,通过脚本标记包含在我的页面中。


因为它使用Generators而我必须支持Internet Explorer 11,所以我需要 babel-polyfill ,所以我的HTML代码如下所示:
&#xA;&#xA;< code>&lt; script src =“// cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.9.1/polyfill.min.js"></script> <script src = “/survey-modal.js”async&gt;&lt; / script&gt;&#xA;&#xA;&#xA;
困扰我的是我正在加载Babel polyfill同步。如果我将 async 添加到第一个脚本标记,我的代码可以正常工作,但我不确定这是否是确定性的,即代码是否只是偶然的,因为polyfill在调查之前完成加载 - 模式脚本。
&#xA;&#xA;从CDN加载babel-polyfill时,使用&lt; script async&gt; 是否安全?
& #xA;答案 0 :(得分:3)
装载babel-polyfill时使用是否安全 CDN?
不,不是。 async
脚本“一旦可用就执行”,并且不保证执行顺序。所以在下面的例子中:
<script src="polyfill.min.js" async></script>
<script src="survey-modal.js" async></script>
“polyfill”脚本有可能在“survey-modal”之后执行。更好的方法如下:
<script src="polyfill.min.js" defer></script>
<script src="survey-modal.js" defer></script>
在解析文档后下载 defer
脚本(因此它不会阻止页面呈现),但保证执行顺序。
PS:您提到当两个脚本都是异步时您的代码都能正常运行。是的,这是偶然的。当从浏览器缓存加载polyfill时它将起作用,如果通过网络获取polyfill,它可能无效。
答案 1 :(得分:0)
如果使用异步标记,则不能保证它会在模式之前加载,所以我不会那样使用它。
答案 2 :(得分:0)
不,它不是确定性的,也不会一直有效。
如果你愿意,你可以在chrome上使用限制,看看当下载速度很低时,它总是无法正常工作。