防止iframe的src中的外部文件被缓存(使用CloudFlare)

时间:2017-05-13 14:37:05

标签: caching iframe browser-cache cloudflare html-head

我正在努力制作一个像plunker一样的游乐场。我刚刚注意到一个非常奇怪的生产行为(在Cloudflare中使用active mode),而在localhost中效果很好。

iframe,游乐场预览index_internal.html,其中可能包含指向其他文件的链接(例如.html.js.css)。 iframe能够解释外部链接,例如<script src="script.js"></script>

因此,每当用户在编辑器上修改其文件(例如script.js)时,我的程序会将新文件保存到服务器上的临时文件夹中,然后按iframe.src = iframe.src刷新iframe,适用于localhost

但是,我意识到,在生产中,浏览器始终会加载初始 script.js,即使用户在编辑器中修改它并在文件夹中写入新版本服务器。例如,我在Dev Tools ==> Network中看到的始终是script.js的初始版本,而我可以通过左侧的script.js检查服务器中保存的less的新版本手。

有谁知道为什么会这样?以及如何解决它?

enter image description here

修改1:

我尝试了以下操作,但不适用于script.js

var iframe = document.getElementById('myiframe');
iframe.contentWindow.location.reload(true);
iframe.contentDocument.location.reload(true);
iframe.contentWindow.location.href = iframe.contentWindow.location.href
iframe.contentWindow.src = iframe.contentWindow.src
iframe.contentWindow.location.replace(iframe.contentWindow.location.href)

我尝试添加版本,它与index_internal.html一起使用,但没有重新加载script.js

var newSrc = iframe.src.split('?')[0] 
iframe.src = newSrc + "?uid=" + Math.floor((Math.random() * 100000) + 1);

如果我将Cloudflare转为development mode,则重新加载script.js,但我确实希望将Cloudflare保留在active mode

1 个答案:

答案 0 :(得分:2)

我找到了。

我们可以在CloudFlare中创建用于缓存的自定义规则:

https://support.cloudflare.com/hc/en-us/articles/200168306-Is-there-a-tutorial-for-Page-Rules-#cache

例如,我可以将Bypass设置为文件夹Cache Level的{​​{1}}。