我们一直在为用户创建一个 SaaS 并为他们提供一个脚本以附加在他们的网站页面中,并且无法附加带有脚本的版本,因为用户会将脚本附加到他们的网站以获得功能,我不能强迫他们每次更新脚本时更改版本
因此,我们找到了一种在每次用户调用原始脚本时加载新版本脚本的方法
提供给用户的脚本链接
<script src="https://thesaasdomain.com/somejsfile.js" data-ut="user_token"></script>
脚本文件
if($('script[src^="https://thesaasdomain.com/somejsfile.js?"]').length !== 0) {
init();
} else {
loadScript("https://thesaasdomain.com/somejsfile.js?" + guid());
}
var loadscript = function(scriptURL) {
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = scriptURL;
head.appendChild(script);
}
var guid = function() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
var init = function() {
// our main code
}
解释:
用户在他们的网站上附加了提供给他们的脚本,我们使用 jQuery 选择器检查了脚本附带的唯一令牌是否存在,如果不存在,则使用更新的令牌(或版本)动态加载它
这是两次调用相同的脚本,这可能是一个性能问题,但它确实解决了强制脚本不从缓存中加载而不将版本放入给用户或客户端的实际脚本链接的问题
免责声明:如果性能对您来说是个大问题,请不要使用。