javascript - 如果 popper.js 无法加载则回退

标签 javascript bootstrap-4 cdn fallback popper.js

如何测试 popper.js 是否已加载,以便我可以从 CDN 回退到本地副本?

Popper 是 Bootstrap 4 所必需的,必须首先加载。我想使用我在下面使用的相同引导回退技术,这样如果 popper.js CDN 失败,浏览器回退到从我的服务器加载 popper.js。

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js"></script>
<script>if(typeof($.fn.modal) === 'undefined') {document.write('<script src="local/bootstrap.min.js"><\/script>')}</script>

最佳答案

检查 Popper 变量。

如果它的类型是“未定义”那么它 Popper 加载失败,你可以回退到本地副本:

<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" ></script>
<script>if(typeof(Popper) === 'undefined') {document.write('<script src="static/lib/popper.min.js"><\/script>')}</script>

--

2019 年 2 月更新

自从 Chrome >55 现在“干预”一些包含脚本标签的 document.write(例如 2G 移动设备上的用户),但是,如果 document.write 引用相同的域或 TLD+1(即,脚本static.mydomain.com 从 www.mydomain.com 上的 html 文件中引用),那么 Chrome 将不会干预并停止脚本下载。所以现在上面的方法工作正常。我还稍微改进了代码:

<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script>window.Popper || document.write('<script src="static/lib/popper.min.js"><\/script>')</script>

要考虑的另一项更改是将 document.write here 放入一个函数中,并对您首选的分析提供程序进行事件调用,以便您可以跟踪您的网站何时回退到外部脚本的本地副本,而不是而不是默默地这样做。

关于javascript - 如果 popper.js 无法加载则回退,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47077919/

相关文章:

javascript - 如何通过单击一次销毁命名的 jquery-styles?

javascript - 移相器信号 : listener is a required param of add() and should be a Function

javascript - Angular 6 : How to set response type as text while making http call

javascript - 使用 RequireJS 从 CDN 加载 CodeMirror

javascript - fabricjs 为每个对象更改光标

html - CSS div 高度填充剩余空间并在达到屏幕最大高度时滚动

javascript - 如何在不同设备上更改上传视频的宽度?

css - 无法调整 Bootstrap open-iconic 的大小

facebook - Facebook CDN 地址列表

google-app-engine - 谷歌云平台存储错误 : "Locked Domain Expired" when trying to access my storage items