net::ERR_FAILED для сетевого элемента в manifest.cache

Мой файл манифеста кэша выглядит так:

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, Это для браузера Google Chrome, но я получаю аналогичную ошибку для Firefox. Что мне не хватает?

1 ответ

Это связано с теми параметрами, которые вы передаете для client.js, т.е.?onload=checkAuth

В Интернете всякий раз, когда вы передаете какой-либо параметр, этот запрос считается уникальным. Так что, насколько это касается браузера, скрипты, объявленные в вашем манифесте, не совпадают

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 не кэшированным. Итак, теперь вы можете догадаться, что изменение манифеста на приведенное ниже позволит решить проблему

CACHE MANIFEST
calendar.html
scripts/jquery.js
scripts/calendar.js

NETWORK:
https://apis.google.com/js/client.js?onload=checkAuth

Ofc просто удаляю onload=checkAuth может также работать в случае, если вам не нужен обратный вызов. Просто вытрите весь кэш и перезагрузите, чтобы увидеть магию!

Другие вопросы по тегам