Как я могу использовать в iOS функцию Chrome «Открыть в» с PDF-файлом за защищенным веб-сайтом или с большим URL-адресом данных? - PullRequest
0 голосов
/ 04 июня 2018

Я работаю над сайтом, который обслуживает PDF-файлы (созданные на лету) для просмотра и загрузки пользователем.Пользователь должен сохранить их, подписать их (используя любое стороннее приложение PDF), а затем загрузить их. По этому конкретному вопросу мы сосредоточены на передаче PDF из Chrome на iOS стороннему приложению PDF.

На незащищенном общедоступном веб-сайте, который просматривает PDF-файл по общедоступной ссылкетакие как эта форма IRS работает нормально.Вы можете просмотреть его, затем нажать «Открыть в ...» в правом нижнем углу и выбрать другое приложение.Другое приложение получит URL-адрес PDF-файла и откроет его.

Однако на защищенном веб-сайте передача обслуживания происходит неправильно.После нажатия «Открыть в ...» в правом нижнем углу документа PDF и выбора стороннего приложения PDF, другое приложение получит URL-адрес, но не файлы cookie, необходимые для поддержания состояния сеанса.Поэтому, когда он загружает PDF, он получает страницу входа на сайт.Разные приложения обрабатывают это по-разному, но, например, Google Drive сохранит страницу входа в систему как поврежденный файл PDF. Обратите внимание, что в Safari это работает нормально, проблема связана с iOS Chrome.

Вместо этого я попытался сделать так, чтобы браузер Chrome на iOS загружал PDF как двоичный объект,затем создайте URL-адрес данных и отобразите PDF, используя это:

<a id="myLink">Click here to test PDF data url</a>
<script>
    $('#myLink').click(function() {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', '/f1099msc.pdf');
        xhr.responseType = 'arraybuffer';
        xhr.onload = function(e) {
            if (this.status == 200) {
                var blob = new Blob([this.response], { type: 'application/pdf' });
                var reader = new FileReader();
                reader.onloadend = function() {
                    window.open(reader.result);
                };
                reader.readAsDataURL(blob);
            }
        };
        xhr.send();
        return false;
    });
</script>

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

Есть мысли?Как я могу использовать функцию «Открыть в» в iOS Chrome на iOS с PDF за защищенным веб-сайтом или с большим URL-адресом данных?

Вот пример страницы, которая будет загружать PDF как данныеurl. Работает для отображения PDF только на Chrome iOS.Другие браузеры не являются поклонниками этого метода.

1 Ответ

0 голосов
/ 04 июня 2018

Похоже, источником проблемы является реализованное поведение в Chrome для iOS.Существует проблема, поданная по адресу https://bugs.chromium.org/p/chromium/issues/detail?id=831678, касающаяся отсутствующих файлов cookie.

В качестве альтернативного подхода можно создать временный URL-адрес, содержащий все необходимые данные для проверки подлинности и не основанный на отправке файлов cookie вместе сrequest.

Используйте эти временные URL для открытия PDF в Chrome.Нажатие кнопки «Открыть в ...» передает этот временный URL-адрес стороннему приложению.По соображениям безопасности вы должны деактивировать временные URL-адреса в зависимости от времени или количества вызовов.Можно также ввести ограничения, согласно которым временный URL-адрес действителен только для этого точного IP-адреса.

...