代码之家  ›  专栏  ›  技术社区  ›  Mr. Boy

是否可能动态重新加载JS脚本文件?

  •  -2
  • Mr. Boy  · 技术社区  · 7 年前

    我们正在考虑使用Blockly,使超级用户能够以非编码、沙盒的方式设计业务规则。

    当他们编辑图表以重新生成新的JS代码时,我想将其重新加载到浏览器中。其中一个方面是,如果代码保存为外部JS脚本,如何在浏览器中重新加载它而不刷新整个页面?

    1 回复  |  直到 7 年前
        1
  •  1
  •   user4396006 user4396006    7 年前

    尽管你的解释非常混乱,但我会尽量坚持标题,并提供一个如何动态重新加载特定JS文件的示例(如果不是你想要的,我深表歉意,但你最好重新编写你的问题)。

    我猜你没有在谷歌搜索很多,因为在这 answer 您将了解如何重新加载JS文件:

    function reloadJs(src) {
        src = $('script[src$="' + src + '"]').attr("src");
        $('script[src$="' + src + '"]').remove();
        $('<script/>').attr('src', src).appendTo('body');
    }
    

    正如用户所指出的,您可以删除旧标记,但为此,应该已经完成了代码运行时。您只需要调用指定源地址的函数。

    这实际上会重新加载文件,但您希望传递一些修改,因此需要在服务器端运行一个脚本,根据需要为文件提供服务。您可以在JS重载中指定信息作为GET参数,例如 ‘?parameter1=data1&parameter2=data2’ .

    但是,我不建议这样做,从我的角度来看,JS代码应该调用AJAX来修改其行为,而不是重新加载整个文件。但这取决于你。

    编辑

    如果我没弄错的话,实际上你想做的是给客户端提供实际的JS代码,而不是在服务器上运行文件,根据他们设计的一些图表,这些图表最终将构建到JS代码中。那么你能做的就是 <div> 标记为 <pre><code> 其内容通过AJAX调用通过jQuery更改的标记。

    然后,您不应该实际将JS文件作为脚本加载,因为这将使浏览器执行它。你要做的是这样的:

    指数html

    <div>
        <pre>
            <code id=“myCode”>
                Your JS file will show soon.
            </code>
        </pre>
    </div>
    

    从jQuery文档开始:

    剧本js公司

    var jqxhr = $.get( "myFile.js", function(data) {
      $(“#myCode”).html(data)
    })
      .done(function() {
        alert( "second success" );
      })
      .fail(function() {
        alert( "error" );
      })
      .always(function() {
        alert( "finished" );
      });
    

    显然,您必须在HTML文件中引用JS文件,否则它将无法加载。您可以将其封装在函数中,并根据您的方便进行调用。

    推荐文章