我希望通过每个应用程序中的动作扩展来获取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.它应该如下所示:
NSExtensionAttributes NSExtensionActivationRule NSExtensionActivationSupportsWebURLWithMaxCount 1
然后,不要向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上可选择的许多链接都是Tweets和Twitter用户页面的链接,而不是实际发布的内容.