在我的元素中,页面加载后,我必须动态加载JS和CSS文件。
通过使用下面的代码,我可以添加和删除js文件,但是通过删除上一个文件添加了新文件之后,则上一个文件没有显示在标题中,但是当我运行该代码时,两个js文件代码都被执行了。不知道如何完全删除文件,有人可以帮我吗。
为此,代码是。

在 View 页面标题中:-

<link rel="stylesheet" id="videoCss" />
<script id="videojs"></script>

动态加载JS和CSS文件的Jquery:
function addRemoveJsCssFile(filename, filetype)
    {
        var fileref='';
        if (filetype == "js") { //if filename is a external JavaScript file
            document.getElementById("videojs").remove();
            fileref=document.createElement('script');
            fileref.setAttribute("type", "text/javascript");
            fileref.setAttribute("src", filename);
            fileref.setAttribute("id", "videojs");
        }
        else if (filetype == "css") { //if filename is an external CSS file

            document.getElementById("videoCss").remove();
            fileref = document.createElement("link");
            fileref.setAttribute("rel", "stylesheet");
            fileref.setAttribute("type", "text/css");
            fileref.setAttribute("href", filename);
            fileref.setAttribute("id", "videoCss");
        }
        if (typeof fileref != "undefined")
            document.getElementsByTagName("head")[0].appendChild(fileref)
    }

在此功能中,我们必须传递文件位置和文件类型(即css或js)以动态添加文件。谢谢。

最佳答案

我不知道我是否了解您的问题,但让我尝试解释一下:

如果原始脚本位于开头部分,则将立即执行,因为Javascript是一种过程语言,因此放在“稍后”的脚本中您无能为力:较早定义的脚本较早执行,因此,可能是您的问题是您调用函数,停止videojs执行为时已晚。

另一方面,使用之前定义的脚本,以后看不到脚本标记..或者更好,如果您要推迟,则可以,但是在推迟的情况下,您将再次遇到相同的问题,即videojs脚本总是会被执行(总是太迟或太早,因为您的语句将在第三种方法之前或之后执行)。

当然,您可以在设置全局对象之前加载脚本,该全局对象可能对videojs说“停止,不要继续处理您的东西!”但是显然,您也可以编辑videojs代码,并使用包装“if”询问该对象是否可以继续进行操作,我认为这不是您要查找的响应。

但是问题是:在该JavaScript videojs(加载时开始的事件绑定(bind)程序)中执行了什么?还是在其他情况下?还是只是按顺序执行的语句序列(对文字游戏感到抱歉)按顺序执行?

在第一种和第二种情况下,您需要做一些事:如果video.js在触发事件时启动,则可以停止执行该函数,而要在触发之前进行操作:您必须删除事件订阅。要取消绑定(bind)事件,必须知道第一个脚本的操作方式以及预订的事件才能取消绑定(bind)。

这是在jQuery ready事件之前执行脚本的方法(但是对于 native javascript事件也有效,因此我认为这可能会有所帮助):

running jQuery code before the dom is ready

这个答案甚至对于每个文档事件都是有用的,不仅对于加载或“jQuery就绪”。

但是,即使有可能删除每个videojs脚本效果的绑定(bind)“消失”,这也不是一件容易的事,因为

  • 总体而言,videojs已被执行
  • 这仅适用于videojs,至少它仅适用于使用同一事件启动的硬编码脚本,但不适用于所有硬编码脚本

  • 因此,我建议您使用的目的是完全使用此管理器来管理脚本的加载和卸载,而不是用HTML对其进行硬编码。

    PS:您听说过require.js吗?

    If not, take a look here

    10-06 08:50
    查看更多