2015-12-07 84 views
2

我想通过每个应用程序的动作扩展,而不仅仅是Safari。例如,在twitter.app中,当您长时间按下链接时,共享表打开并且扩展程序可以使用该URL。如果可能的话,我想在没有javascript文件的情况下做到这一点。应用程序扩展Swift:从任何应用程序获取url没有javascript

目前我正在使用js文件来获取Safari浏览器中的网址,并且这种方式可行,但是在其他应用程序(如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文件。

在此先感谢

+0

不知道你在问什么! *我想通过每个应用程序中的分享表获得网址,而不需要一个JavaScript文件*什么网址,什么应用程序,什么JavaScript文件? – luk2302

+0

你能解释清楚吗?我需要完全相同的东西...... – Mehmet

回答

3

如果你需要的是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并使用加载的网址:

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

这将与Twitter合作,但我还没有任何额外的应用程序确认。当然,请记住,Twitter上可选择的许多链接都是Tweets和Twitter用户页面的链接,而不是实际发布的内容。

相关问题