繁体   English   中英

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

[英]How to get a iOS share extension to get web page content from Safari instead of URL

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

我想要的是获得用户正在查看的内容的某种形式的渲染版本(PDF 或 HTML?)。 由于身份验证问题等,使用 URL 并在 webview 中打开它是不可行的。

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

            <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,但没有看到好的例子,我不清楚这在任何情况下是否对我有帮助。

关键是在 info.plist 文件中使用这一行:

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

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

这是您应该做什么的简短列表,询问您是否需要更多东西,如果您也从这里开始,很容易在互联网上找到更多数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM