我想动态替换脚本的源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,这不是我想要的。这部分也有任何提示吗?
感谢所有可能的帮助。
答案 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是?你不能这样做。您必须取消定义和取消附加由原始脚本执行的事件。