假设我们有几个不同的网站:website1.com、website2.com、website3.com。我们在所有这些上都使用 jQuery,并从 CDN 中包含它,例如 googleapis.com。浏览器的预期行为是将其缓存一次并将其用于所有其他网站。Chrome 似乎可以这样做,但 Safari 会为每个域下载 jQuery。
例子
- 使用下面给定的 JS 代码,在 Chrome中打开nytimes.com、bbc.com和dw.de。
- 在第一个网站上附加 jQuery,然后查看 DevTools 的 Network 选项卡。它会说它得到了 jQuery。
- 现在打开任何其他网站并再次附加 jQuery - 答案将是“来自缓存”。
但是,Safari 会说它正在为每个域加载 jQuery,但尝试打开其中一个域上的任何网页并再次附加脚本 - 你会看到现在它说它从缓存中获取了 jQuery。所以看起来它缓存了一个域的数据,即使它已经从另一个域的确切 URL 下载了资源。
这个假设是否正确,如果正确,如何解决?
您可以复制/粘贴的代码:
setTimeout(function() {
var SCRIPT_SRC = '//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js';
var s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = SCRIPT_SRC;
var x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
}, 0);
UPD:使用静态图像对其进行了测试。
test.com、test2.com 和 test3.com 有<img src="http://image.com/image.jpg" />
. 在除 Safari 之外的所有浏览器中,访问日志仅显示一个(第一个)对图像的请求。Safari 获取每个新域(但不是子域)的图像。