ios - 应用扩展 Swift : get url from any app without javascript

标签 ios swift ios-sharesheet

我想通过每个应用程序中的操作扩展获取 url,而不仅仅是 safari。例如,在 twitter.app 中,当您长按链接时,共享表将打开,扩展程序可以使用该 url。如果可能的话,我想在没有 javascript 文件的情况下进行。

目前我正在使用一个 js 文件来获取 safari 中的 url 并且这有效,但在其他应用程序(如 twitter)中只出现黑屏。

    let extensionItem = extensionContext?.inputItems.first as! NSExtensionItem
    let itemProvider = extensionItem.attachments?.first as! NSItemProvider

    let propertyList = String(kUTTypePropertyList)
    if itemProvider.hasItemConformingToTypeIdentifier(propertyList) {
        itemProvider.loadItemForTypeIdentifier(propertyList, options: nil, completionHandler: { (item, error) -> Void in
            let dictionary = item as! NSDictionary
            NSOperationQueue.mainQueue().addOperationWithBlock {
                let results = dictionary[NSExtensionJavaScriptPreprocessingResultsKey] as! NSDictionary
                let urlString = results["currentUrl"] as? String
                self.url = NSURL(string: urlString!)

                print(self.url)
            }
        })
    } else {
        print("error")
    }

我想通过每个应用程序中的共享表获取 url,而不需要 javascript 文件。

提前致谢

最佳答案

如果您只需要 URL,请删除 JS 预处理文件,因为它似乎用属性列表替换了所有其他扩展项附件。

删除 Info.plist 中的 NSExtensionJavaScriptPreprocessingFile。它应该看起来像这样:

<key>NSExtensionAttributes</key>
    <dict>
        <key>NSExtensionActivationRule</key>
        <dict>
            <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
            <string>1</string>
        </dict>
    </dict>

然后,不要向您的 itemProvider 询问属性列表,只需这样做:

if itemProvider.hasItemConformingToTypeIdentifier("public.url") {
     itemProvider.loadItemForTypeIdentifier(kUTTypeURL as String, options: nil, completionHandler: { (result: NSSecureCoding?, error: NSError!) in
          let url = result as? NSURL
          //assign url here
      })
 }

如果您需要仅从 JS 预处理中获得的任何其他信息(可能是标题),您可以在 UIWebview 中加载 url 并使用:

let title = webView.stringByEvaluatingJavaScriptFromString("document.title")

这将适用于 Twitter,但我尚未确认是否适用于任何其他应用程序。当然,请记住,Twitter 上的许多可选链接都是指向推文和 Twitter 用户页面的链接,而不是实际发布的内容。

关于ios - 应用扩展 Swift : get url from any app without javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34140944/

相关文章:

ios - 在 Realm 中组合查询?

swift - 错误 "[ShareSheet] connection invalidated"错误 iOS13+ 但不在 iOS 11.4 上

swift - 无法在 Xcode 7.3.1 上使用类型 'Result<Any>' 的参数列表调用类型 '(int,int)' 的初始值设定项

swift - 自定义导航栏在转到另一个 View 时重叠

ios - 格式化与共享表共享的信息

ios - UITableviewCell添加UITextfield导致detailTextLabel滑动 "up"

ios - 应用程序终止时发送 HTTP POST

ios - 为 MBProgressHUD 添加完成回调

ios - 在子类中实现协议(protocol)方法