如何获取iOS共享扩展名以从Safari而非URL获取网页内容

时间:2019-03-28 18:58:24

标签: ios swift ios8-share-extension

我有一个迅速编写的工作共享扩展名。当我从Safari测试共享操作时,我总是只获得URL类型(kUTTypeURL)。

我想要的是获得某种形式的用户正在查看的呈现版本(PDF或HTML?)。由于身份验证等原因,无法使用URL并在Web视图中打开它。

我尝试了许多不同的激活规则,没有任何变化。这是我正在使用的当前版本:

            <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 :(得分:0)

关键在于在info.plist文件中使用此行:

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

NSExtensionJavaScriptPreprocessingFile,您指定.js文件的名称,该文件包含必须包含名为ExtensionPreprocessingJS的全局对象的javascript文件。然后,您应该在代码中搜索符合kUTTypePropertyList的项目(看来您已经在查看代码了)。

这是您应该做的事情的简短清单,询问您是否还需要其他内容,如果您也从此开始,很容易在Internet上找到更多数据。