jQuery重写动态写入页面的脚本标记上的src属性(添加时间戳,防止使用浏览器缓存)

jQuery重写动态写入页面的脚本标记上的src属性(添加时间戳,防止使用浏览器缓存),jquery,Jquery,我正在使用jQuery的.prepend()、.html()和.after()函数将html写入我的页面。这包括一个指向静态JavaScript文件的标记 我发现有些东西(我猜是jQuery)正在重写标记的src属性,以便在querystring中包含时间戳。这会阻止使用浏览器缓存,在我的例子中,这是我想要的,因为它是一个静态JavaScript文件,如果浏览器缓存中已经有该文件,我不希望它被迫发出另一个HTTP请求 我还处理了更多传统的JSONP请求,其中这个特性非常有用——它可以防止浏览器使

我正在使用jQuery的.prepend()、.html()和.after()函数将html写入我的页面。这包括一个指向静态JavaScript文件的标记

我发现有些东西(我猜是jQuery)正在重写标记的src属性,以便在querystring中包含时间戳。这会阻止使用浏览器缓存,在我的例子中,这是我想要的,因为它是一个静态JavaScript文件,如果浏览器缓存中已经有该文件,我不希望它被迫发出另一个HTTP请求

我还处理了更多传统的JSONP请求,其中这个特性非常有用——它可以防止浏览器使用来自过去JSONP请求的缓存结果

有没有一种方法可以在不禁用附加到JSONP请求的时间戳的情况下禁用此“src重写功能”呢?因为,您可以设置一个ajaxPrefilter来防止附加时间戳,但是我认为(?)这也会从JSONP请求中删除时间戳

以下是相关的JavaScript代码:

var scriptTag = "<script type='text/javascript' src='//jsfiddle.net/echo/jsonp/'></ script>";

var appHost = $('#app-host');

// prepend, html, and after exhibit the same behavior
appHost.prepend(scriptTag);
appHost.html(scriptTag);
appHost.after(scriptTag);
var scriptTag=”“;
var appHost=$(“#app host”);
//prepend、html和after表现出相同的行为
appHost.prepend(scriptTag);
html(scriptTag);
appHost.after(scriptTag);

我使用了以下AJAX预滤器。基本上,我正在检查被调用的URL,以确保它是我想要缓存的URL

jQuery.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
    // We want to make sure that calls to the "JavaScript controllers" via <script>
    // tags are not prevented from using the browser cache.
    if ( options.dataType == 'script' && typeof(options.url) === "string"
        && options.url.toLowerCase().indexOf("js-controllers") > -1) {
        options.cache = true;
    }
});
jQuery.ajaxPrefilter(函数(选项、原始选项、jqXHR){
//我们希望确保通过
//不会阻止标记使用浏览器缓存。
if(options.dataType=='script'&&typeof(options.url)==='string'
&&options.url.toLowerCase().indexOf(“js控制器”)>-1){
options.cache=true;
}
});

这对我来说是有效的,而且似乎相对安全。

我读了这个问题,但是提供的答案听起来好像是为了防止时间戳被附加到JSONP请求的URL上,这对我来说不起作用。我有一些JSONP请求会在没有时间戳的情况下中断。如果有办法区分JSONP请求和标记,那么我可以使用ajaxPrefilter,但是由于JSONP请求实际上是一个标记。。。我不知道这是否可能?