javascript - Firefox 不执行动态加载的 JavaScript 文件

标签 javascript jquery firefox

我正在尝试加载两个脚本,由于它们的 type 属性是非标准的,因此在功能上被推迟,即 text/javascript/defer。这样做会导致解析器忽略它们,因此我想使用 JavaScript 重新加载它们。

我的 HTML 如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>No Title</title>
<meta name="keywords" content="">
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">

<script type="text/javascript/defer" src="assets/js/test3.js"></script>
<script type="text/javascript/defer" src="assets/js/test4.js"></script>

<script type="text/javascript" src="assets/js/jquery.js"></script>
<script>

    $(document).ready(function(){

        var defer_js_collection_obj = $("[type='text/javascript/defer']"),
            el_head_rq_obj = $('head'),
            el_head_obj = el_head_rq_obj[0]
        ;

        if(defer_js_collection_obj.length > 0)
        {
            //Reload JavaScript
            defer_js_collection_obj.each(function() {

                var file_src_outer_html_str = this.outerHTML;
                var file_src_res_arr = file_src_outer_html_str.match("src *\= *[\"\']{1}(.*?)[\"\']{1}");
                var file_src_str = file_src_res_arr[1];

                var fileref = document.createElement('script');
                fileref.setAttribute("type", "text/javascript");
                fileref.setAttribute("src", file_src_str);
                document.getElementsByTagName("head")[0].appendChild(fileref);
            });

            //Unload JavaScript with defer tag
            for(var j = defer_js_collection_obj.length-1; j >= 0; j--)
            {
                defer_js_collection_obj[j].parentNode.removeChild(defer_js_collection_obj[j]);
            }
        }

    });

</script>
</head>
<body>
   <div>Load Deferred JavaScript</div>
</body>
</html>

jquery.js 是版本 1.11.2。 test3.jstest4.js 引用我想要加载的 javascript 文件,它们包含 console.log('test3.js is returned');console.log('test4.js 已加载'); 分别。

我遇到的问题是这个脚本几乎可以在除 Firefox 之外的任何地方运行。我使用的是 Mac OS X 10.10.5,使用 Firefox 46.0.1,加载脚本时没有看到 console.log 消息。

我该如何解决这个问题?

最佳答案

这可能是 mime 类型问题。您是否在控制台中看到任何指出“格式不正确”的消息?无论如何,这似乎对我有用,并且我同意当我第一次尝试时你的代码在 FF 中不起作用。

    $(document).ready(function(){
        console.log("main");

        var $body = $($("body")[0]);
        var $scripts = $("[type='text/javascript/defer']");

        $scripts.each(function(){
            var scriptTag = document.createElement("script");
            scriptTag.setAttribute("type", "text/javascript");
            scriptTag.setAttribute("src", $(this).attr("src"));
            $body.append(scriptTag);
        });
    });

关于javascript - Firefox 不执行动态加载的 JavaScript 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37620440/

相关文章:

javascript - 如何在剑道菜单中为所选项目应用样式

javascript - 使用 JavaScript 和 XHTML : XMLHttpRequest's open/send do not work if before onreadystatechange

php - 仅当使用 DNS 时,AJAX 请求出现 405(方法不允许)

javascript - JQuery插件函数调用

javascript - 如何通过单击取消选中默认选中的单选按钮

jquery - 通过 Ajax 动态列表人口选择 jQuery 并使用 Bootstrap Validator 进行验证

jquery - 如何将jquery函数应用到每个实例

javascript - 如何在 Firefox 中从剪贴板获取数据

css - 为什么我的body视角导致FF显示不正确

javascript - firefox 25 没有为音频标签定义 play() ?