【问题标题】:jQuery: How to insert or remove a .js file at runtime?jQuery:如何在运行时插入或删除 .js 文件?
【发布时间】:2012-02-08 12:52:33
【问题描述】:

我想在单击链接后添加一个 .js 文件。 .js 文件是一个脚本,没有直接调用的函数,但该文件必须插入到网站的正文部分。

另一种解决方案是,如果在页面加载时调用文件并且调用链接的单击事件,则删除 .js 文件。

我尝试过这样的事情,但没有任何反应:

$(".myLink").click(function(){
    $.getScript("myJavascriptFile.js");
});

还有这里:

$(".myLink").click(function(){
var script = document.createElement('script');
        script.type = 'text/javascript';
        script.src = "app_javascript/dragscroll.js";
        $(".myDiv").append(script); // or  $("body").append(script);
});

【问题讨论】:

  • 你认为删除 JS 文件有什么好处?
  • 我需要这样做来测试和展示这个功能。此功能有三种不同类型,它们应在单击链接后出现,例如“测试功能2”。三个函数中的两个可以直接用函数调用(callFunction1();),但第三个必须包含在内而不调用函数。
  • 为什么要添加/删除这样的脚本?很大吗?

标签: javascript jquery file append


【解决方案1】:

嗯,实际上,“什么都没有发生”听起来很可能太响了。 getScript 绝对是异步的,所以你应该提供任何代码,它依赖于在加载处理程序中使用这个脚本,实际上是第二个参数。

$.getScript('here_comes_the_script.js', function(){...//here comes the code})

您可以使用一些包装来使事情更灵活 - 通过将事件传递给加载处理程序,如下所示:

getScriptDetectable = function(src) {
     getScript(src, function() {
      $(document).trigger("new_script", {src: src})
     });
}

当然,这并不能让您免于考虑这段代码是异步的这一事实。

关于删除脚本。实际上没有通用的方法可以让浏览器“看不见”代码。

您可以尝试执行以下操作:

var src = document.querySelector('script');
src.parentNode.removeChild(src);

但是这个文件中所有已经被评估的代码都被评估了,所以这没有多大意义。

【讨论】:

    【解决方案2】:

    有一个 jQuery 函数 - jQuery.getScript()。它将脚本标签附加到正文中,因此它完全符合您的要求。

    我不认为删除此标记会禁用代码 - 您需要单独删除所有已定义的全局函数,取消绑定事件处理程序等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多