CDN fallback for DataTables.js

CDN fallback for DataTables.js

本文关键字:js DataTables for fallback CDN      更新时间:2023-09-26

我正试图为datatables.min.js编写一个CDN回退——不知怎么的,我在谷歌或datatables.net上找不到。在阅读了这篇StackOverflow帖子和这篇datatables帖子后,我想出了这篇不成功的文章(甚至尝试了各种表达式,如图所示):

<script>
    if (typeof jQuery.fn.dataTable === 'undefined') {
        document.write('<script src="~/scripts/datatables.min.js"><'/script>');            
        //document.write('<script src="~/scripts/datatables.min.js">'x3C/script>'); //same
        //document.write(''x3Cscript src="~/scripts/datatables.min.js"'x3E'x3C/script'x3E'); //same
    }
</script>

为了进行故障排除,我直接加载了datatables.min.js,得到了以下两个令人困惑的结果:

1/I从此获得undefined(BAD)

<script>
    document.write('<script src="~/scripts/datatables.min.js"><'/script>');
</script>
<script>
    alert(typeof jQuery.fn.dataTable);
</script>

2/。。。但不知怎么的,我从中得到了function(好):

<script src="~/scripts/datatables.min.js"></script>
<script>
    alert(typeof jQuery.fn.dataTable);
</script>

这在我看来是一样的,特别是因为document.write使用同步加载。我还尝试了一个纯DOM方法,但没有成功。

document.write缺少什么

试试这个

    <script>
    if (typeof jQuery.fn.dataTable === 'undefined') {
        $.getScript(baseURL + '/scripts/datatables.min.js?' + Math.random(), function () {
            //do stuff here
            alert(typeof jQuery.fn.dataTable);
        });
    }
    </script>

在您的代码文档中,write和alert将同时处理,请注意,在"database.min.js"可用时,alert将完成。

使用$(document).ready()或winidow.onload,您将看到预期的结果。

尽管在做这件事之前阅读了最佳实践,优缺点在这里-

http://www.stevesouders.com/blog/2012/04/10/dont-docwrite-scripts/

我建议使用RequireJS来有效地完成这项工作,正如Scott Hanselman所描述的那样,请在尝试之前先浏览下面的链接,因为他详细讨论了CDN回退,并涵盖了它的各个方面-

http://www.hanselman.com/blog/CDNsFailButYourScriptsDontHaveToFallbackFromCDNToLocalJQuery.aspx

希望它能对你有所帮助,给你找到正确方向的坚实基础。

根据公认的回退实践,DataTables的正确CDN回退是:

<script>
    if (typeof jQuery.fn.dataTable === 'undefined') {
        document.write(''x3Cscript src="/scripts/datatables.min.js"'x3E'x3C/script'x3E');
        //document.write('<script src="/scripts/datatables.min.js"><'/script>');
    }
</script>

或简称

<script>window.jQuery.fn.dataTable || document.write(''x3Cscript src="/scripts/datatables.min.js"'x3E'x3C/script'x3E')</script>

正如@ParthTrivedi所建议的那样,src=""中的tilda/相对路径是问题所在(见注释)。根据这篇文章,"在脚本中,路径是相对于显示的页面"。