javascript - 通过 Javascript 加载 CDN 文件

标签 javascript css asynchronous cdn

我一直在努力在 Google Pagespeed ( https://developers.google.com/speed/pagespeed/insights/ ) 上达到 100/100,但在尝试使用 Javascript 下载基于 CDN 的文件时,我总是被挂断。我收到“注意:已显示临时 header ”。我认为它出于安全原因阻止了这种调用,但我被卡住了。

我可以像这样调用脚本文件异步,谷歌喜欢这样:

<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js" async></script>

但是我该如何处理 CSS 文件呢?如果我以正常方式调用它:

<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet">

Google 提示说我有一个“阻塞 CSS 资源”。

这是我到目前为止一直在尝试使用的代码的副本:

var headID = document.getElementsByTagName("head")[0];
var cssNode = document.createElement('link');
cssNode.type = 'text/css';
cssNode.rel = 'stylesheet';
cssNode.href = '//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css';
headID.appendChild(cssNode);

有人有什么建议吗?

最佳答案

这是我最终创建的代码,用于同时异步加载 css 和 js 文件。在关闭标记之前将它放在 HTML 的底部,并根据需要编辑 loadjscssfile() 调用。

<script>
    /* Beginning of async download code. */
    window.onload = function(){
        function loadjscssfile(filename, filetype) {
            if(filetype == "js") {
                var cssNode = document.createElement('script');
                cssNode.setAttribute("type", "text/javascript");
                cssNode.setAttribute("src", filename);
            } else if(filetype == "css") {
                var cssNode = document.createElement("link");
                cssNode.setAttribute("rel", "stylesheet");
                cssNode.setAttribute("type", "text/css");
                cssNode.setAttribute("href", filename);
            }
            if(typeof cssNode != "undefined")
                document.getElementsByTagName("head")[0].appendChild(cssNode);
        }
        loadjscssfile("//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css", "css");
        loadjscssfile("//fonts.googleapis.com/css?family=Open+Sans:300&amp;subset=latin,cyrillic-ext,latin-ext,cyrillic,greek-ext,greek,vietnamese", "css");
        loadjscssfile("/css/style.css", "css");
        loadjscssfile("//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js", "js");
        loadjscssfile("//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js", "js");
    };
    /* End of async download code. */
</script>

关于javascript - 通过 Javascript 加载 CDN 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25297322/

相关文章:

javascript - 使用拖放的纯 javascript 和 css 分割器代码,光标问题

testing - 使用 Webpack+karma+etc 进行 Redux 异步测试

ios - 如何从 iOS/swift 中的闭包函数返回值?

javascript - 切换变量 javascript 的值

javascript - 过渡期间格式数字到小数点后一位? (d3.js)

html - 您能否在保持子内容可见的同时淡入背景图像?

javascript - 我可以只在一页上使用 jQuery replaceWith 吗?

css - 将图像的高度设置为与相邻元素 CSS 相同

ios - 有没有一个好方法来检查变量在连续更改一段时间后何时停止更改其值?

javascript - 取消特定元素上的事件冒泡 - javascript