Chrome Update сломал сгенерированную загрузку pdf в php webapp - сервисный работник кажется виноват, но почему? - PullRequest
0 голосов
/ 04 января 2019

Итак, у нас есть небольшое веб-приложение php, которое, помимо прочего, позволяет коллегам экспортировать всю информацию в pdf и загрузить ее.

Это было сделано с помощью wkhtmltopdf, и PDF-файл ранее был немедленно принудительно загружен, как в диалоговом окне «Сохранить как», вместо того, чтобы открывать его в браузере и т. Д.

Заголовки включены:

header('Content-Type: application/force-download');
header('Content-Type: application/octet-stream', false);
header('Content-Type: application/download', false);
header('Content-Type: application/pdf', false);
header('Content-Disposition: attachment; filename="' . basename($file) . '";');
header('Content-Transfer-Encoding: binary');

Теперь с последним обновлением Chrome (71.0.3578.98) PDF-файл вообще НЕ ВИДЕТСЯ для создания. Он не «принудительно загружен» и даже не отображается в браузере, однако с помощью файла-> сохранить как или сочетания клавиш (ctrl + s) вы можете сохранить его, так что он по-прежнему генерируется, но никак не отображается ..

Я заметил, что если я отменяю регистрацию работника сервиса на нашей странице, он ведет себя так же, как и до обновления chrome.

Я проверил это на компьютерах нескольких коллег, некоторые с этой самой новой версией Chrome, другие перед обновлением, и я на 99,9% уверен, что это виновник. Что именно заставило это изменение в поведении произойти, хотя я не уверен.

Есть идеи, как обойти это и заставить его "принудительно" загрузить снова? Можно ли как-нибудь занести в черный список PDF-файлы от работника сервиса

РЕДАКТИРОВАТЬ : Можно также подтвердить это поведение из следующей версии Chrome: 72.0.3626.7 (Developer Build)

1 Ответ

0 голосов
/ 04 января 2019

Хорошо, это было довольно быстро, и я обычно просто удаляю это, но у меня есть подозрение, что это может появиться чаще для других, как только это обновление Chrome начнет применяться в других местах.

Так что, возможно, это не является законным «исправлением» для этого, но добавив несколько строк в мой блок выборки сервисных работников, я смог исключить URL-адреса, которые генерируют PDF-файлы, и поэтому загрузка снова была предложена как обычно.

т.е.

self.addEventListener('fetch', function(event) {
  // Here you can use indexOf or a regex if you'd like  
  if ( event.request.url.indexOf( '/format/pdf/' ) !== -1 ) {
    return false;
  } else {
    event.respondWith(
      caches.match(event.request).then(function(response) {
        return response || fetch(event.request);
      })
    );
  }
});
...