我的缓存清单文件看起来像:
CACHE MANIFEST
calendar.html
scripts/jquery.js
scripts/calendar.js
NETWORK:
https://apis.google.com/js/client.js
我的calendar.html看起来像:
<html manifest="calendar.cache">
<head>
<script src="scripts/jquery.js" type="text/javascript"></script>
<script src="scripts/calendar.js" type="text/javascript"></script>
<script src='https://apis.google.com/js/client.js?onload=checkAuth'></script>
</head>
<body>
<div id="authorize-div" style="display: inline">
<span>Authorize access to Google Calendar API</span>
<!--Button for the user to click to initiate auth sequence -->
<button id="authorize-button">
Authorize
</button>
</div>
<pre id="output"></pre>
<script>
$(document).ready(function(){
console.log("ready");
})
</script>
</body>
</html>
如果我禁用缓存,一切工作正常。但是,当启用缓存时,我得到apis.google.com/js/client.js
文件的错误。错误是jquery.js:5 GET https://apis.google.com/js/client.js?onload=checkAuth&_=1474962265124 net::ERR_FAILED
。这是谷歌chrome浏览器,但我得到一个类似的错误火狐浏览器。我错过了什么?
这是由于您传递给client.js ie的那些参数造成的。?onload=checkAuth
在web中,当你传递任何参数时,请求被认为是唯一的。对于浏览器来说manifest中声明的脚本是不一样的
https://apis.google.com/js/client.js // script A
https://apis.google.com/js/client.js?onload=checkAuth //script B ≠ script A
但是在calendar.cache
中,您仅将脚本A声明为非缓存。所以现在你可以猜测将manifest更改为下面将解决这个问题
CACHE MANIFEST
calendar.html
scripts/jquery.js
scripts/calendar.js
NETWORK:
https://apis.google.com/js/client.js?onload=checkAuth
Ofc只是删除onload=checkAuth
也可以工作,如果你不需要回调。只需擦除整个缓存并重新加载即可看到魔法!