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

时间:2017-12-20 11:01:24

标签: javascript eval blockly

我们正在考虑使用Blockly来让高级用户以非编码的沙盒方式设计业务规则。

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

1 个答案:

答案 0 :(得分:1)

即使您的解释非常混乱,我也会尝试坚持标题并提供一个示例,说明如何动态重新加载特定的JS文件(如果它不是您想要的,那就道歉,但随后你最好重写你的问题。)

我猜你没有经常搜索Google,因为在这个SO 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文件实际加载为脚本,因为这将使浏览器执行它。你要做的是这样的事情:

的index.html

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

从jQuery文档开始:

的script.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文件,否则将无法加载。您可以将其封装在一个函数中,并根据您的方便调用它。