使用未执行的jquery替换脚本src

时间:2010-02-09 03:14:47

标签: jquery dom

我想动态替换脚本的源URL以加速开发阶段,因此没有实际的生产用法。这种替换适用于CSS或图像。但是很难让它与javascript src一起工作。虽然通过src加载,但脚本似乎没有执行。

这就是我所做的。

..................
  return this.each(function() {
    $(this).click(function() {
    var t = $(this);
    options.newVal = t.val();
    var absUrl = '/root_path_still_within_the_same_domain/';
    //options.oldVal is just to limit the replacement scope
    var oldJsUrl = absUrl + options.oldVal + '.js';
    var newJsUrl = absUrl + options.newVal + '.js';

    var reJsUrl = $('script[type*=javascript][src*=' + options.oldVal + ']' || 'script[type*=javascript][src*=' + options.newVal + ']');

        if (oldJsUrl.length && options.oldVal.length) {
          reJsUrl.attr('src', newJsUrl);
        }

        options.oldVal = options.newVal;

    });
  }); 

......................

在Firebug中,目标旧src url(/old_path_to_file.js)将替换为新的(/ new_path_to_file.js)。所以更换工作。但它报道,(参见真实的绝对网址http://,如果相关):

无法加载:http://localhost/........js

的来源

所以脚本src被替换,但没有被执行。我错过了什么,如果这个东西是允许的话呢?

我也试过使用$ .getScript(absUrl + options.newVal +'。js');,但这并没有取代旧的src,只是在dom中添加了更多的j,这不是我想要的。这部分也有任何提示吗?

感谢所有可能的帮助。

2 个答案:

答案 0 :(得分:2)

如果您只想包含其他脚本:

var script = document.createElement("script");
script.src = url; //Specify url here
script.type = "text/javascript";
$("body").append(script);

这将添加一个脚本并执行它...你不能替换src并让它出于安全原因运行。您也不能只是“撤消”原始脚本所做的任何事情...基于您的问题我不认为这是一个问题,但如果是,也许您不应该包含初始脚本标记,请确定您需要的内容和动态创建脚本元素,如上所示。

答案 1 :(得分:0)

你想“替换”旧脚本吗?也就是说,用脚本标签加载的javascript不再在内存中,而新的javascript是?你不能这样做。您必须取消定义和取消附加由原始脚本执行的事件。