2015-12-07 76 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用戶頁面的鏈接,而不是實際發佈的內容。

相關問題