Как получить расширение для iOS для получения содержимого веб-страницы из Safari вместо URL - PullRequest
1 голос
/ 28 марта 2019

У меня есть расширение рабочего ресурса, написанное на swift.Когда я тестирую операцию общего доступа из Safari, я всегда получаю только тип URL (kUTTypeURL).

То, что я хочу, - это получить какую-то визуализированную версию того, на что смотрит пользователь (PDF или HTML?).Использование URL-адреса и его открытие в веб-просмотре невозможно из-за проблем с аутентификацией и т. Д.

Я пробовал много разных правил активации без изменений.Вот текущий, который я использую:

            <key>NSExtensionActivationRule</key>
        <dict>
            <key>NSExtensionActivationSupportsFileWithMaxCount</key>
            <integer>1</integer>
            <key>NSExtensionActivationSupportsImageWithMaxCount</key>
            <integer>20</integer>
            <key>NSExtensionActivationSupportsMovieWithMaxCount</key>
            <integer>0</integer>
            <key>NSExtensionActivationSupportsText</key>
            <true/>
            <key>NSExtensionActivationSupportsWebPageWithMaxCount</key>
            <integer>1</integer>
            <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
            <integer>1</integer>
        </dict>

Мой контроллер выглядит следующим образом - при запуске из Safari он всегда имеет только один тип вложения - URL:

   override func didSelectPost() {


    if let item = extensionContext?.inputItems.first as? NSExtensionItem {
        if let attachments = item.attachments {
            for attachment: NSItemProvider in attachments {
                if attachment.hasItemConformingToTypeIdentifier(kUTTypePropertyList as String) {
                    attachment.loadItem(forTypeIdentifier: kUTTypePropertyList as String, options: nil, completionHandler: { (data, error) in
                        // Do stuff with this content now
                        self.extensionContext?.completeRequest(returningItems: [], completionHandler:nil)
                    })
                }
                if attachment.hasItemConformingToTypeIdentifier(kUTTypeURL as String) {
                    attachment.loadItem(forTypeIdentifier: kUTTypeURL as String, options: nil, completionHandler: { (url, error) in
                        if let shareURL = url as? NSURL {
                            // Do stuff with your URL now.
                        }
                        self.extensionContext?.completeRequest(returningItems: [], completionHandler:nil)
                    })
                }
            }
        }
    }
}

ДругойПодходы, которые я видел, используют файл javascript для обхода DOM, но не видели хороших примеров, и я не уверен, поможет ли это мне в любом случае.

1 Ответ

0 голосов
/ 02 апреля 2019

Ключ в использовании этой строки в вашем файле info.plist:

    <key>NSExtensionAttributes</key>
    <dict>
        <key>NSExtensionJavaScriptPreprocessingFile</key>
        <string>Action</string>
        <key>NSExtensionActivationRule</key>
        ...your should be fine...
    </dict>

В NSExtensionJavaScriptPreprocessingFile вы указываете имя файла .js, который содержит файл javascript, который должен содержать глобальный объект с именем ExtensionPreprocessingJS. Затем вы должны искать элементы, соответствующие kUTTypePropertyList в вашем коде (и, кажется, вы уже это делаете, просматривая свой код).

Это краткий список того, что вам следует делать, спросите, нужно ли вам что-то еще, и в Интернете легко найти больше данных, если вы начнете с этого тоже.

...