wkwebview: выяснить, является ли загруженный контент в веб-представлении PDF-файлом, и дать кнопку загрузки. - PullRequest
3 голосов
/ 13 февраля 2020

Я использую wkWebView для загрузки исследовательских работ, опубликованных в IEEE, Science Direct и др. c. поэтому, когда я нажимаю на любой PDF в исследовательских работах, PDF загружается в веб-просмотр, поэтому есть способ обнаружить и включить значок загрузки в wkWebView.

Пробное решение: Я пытался получить pdf из URL через URLSession, и это работает примерно как 95% , но иногда я не получаю содержимое PDF через URLSession, и pdf загружается в веб-просмотр из-за динамического c создания URL / PDF.

В ходе исследования я столкнулся с: Получить уже загруженный PDF напрямую из WKWebView без повторной загрузки Но в моем Сначала нужно проверить, является ли загруженный контент PDF.

Соответствующий вопрос: добавить кнопку загрузки для PDF в wkwebview в swift 4 Но ответа нет !! !

Для проверки: откройте URL: https://www.sciencedirect.com/science/article/pii/S0946672X17308763 в wkWebView и нажмите кнопку «Загрузить PDF», чтобы загрузить PDF в веб-просмотр.

Вкратце: любой способ определить, загружен ли контент в формате PDF, и загрузить его. tton для загрузки содержимого pdf в папку документов.

Любая помощь приветствуется ... Спасибо

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Вы можете определить, является ли содержимое текущей страницы PDF, проверив ее MIME / тип содержимого с помощью API DOM Document.contentType. Если это application/pdf, мы знаем, что в веб-представлении в данный момент отображается PDF, и можем показать кнопку загрузки:

func isCurrentDocumentPDF(_ onCompletion: (Bool) -> Void) {
    webView.evaluateJavascript("document.contentType") {
        _, result in

        if let contentType = result as? String, contentType == "application/pdf" {
            onCompletion(true)
        } else {
            onCompletion(false)
        }
    }
}

isCurrentDocumentPDF() {
    isPDF in

    if isPDF {
        pdfDownloadButton.isHidden = false
    }
}
0 голосов
/ 17 февраля 2020

Я попробовал указанную вами ссылку, и похоже, что кнопка загрузки открывает PDF в новом окне (тег html), а WKWebView просто игнорирует его.

Чтобы сделать навигацию возможной, вам следует примите протокол WKUIDelegate в вашем контроллере представления и внедрите метод делегата:

override func viewDidLoad() {
   super.viewDidLoad()     
   self.webView.uiDelegate = self
}

func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
    if navigationAction.targetFrame == nil {
        // Here we load this request manually in current window
        webView.load(navigationAction.request)
    }
    return nil
}

В этом примере PDF будет загружен непосредственно в веб-просмотр, и вы можете просматривать / загружать его, как вы делаете для обычных файлов PDF. Если вам необходимо загрузить этот PDF-файл (после его загрузки), вам нужно использовать Fetch API, как описано здесь .

...