3

サファリだけでなく、すべてのアプリでアクション拡張機能を介して URL を取得したいと考えています。たとえば、twitter.app でリンクを長押しすると、共有シートが開き、拡張機能でその URL を使用できます。可能であれば、javascript ファイルなしで実行したいと思います。

現在、私は js ファイルを使用してサファリで 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")
    }

JavaScriptファイルを必要とせずに、すべてのアプリの共有シートからURLを取得したいと思います。

前もって感謝します

4

1 に答える 1

9

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 の前処理 (おそらくタイトル) からのみ取得した追加情報が必要な場合は、URL を UIWebview にロードして使用できます。

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

これは Twitter で動作しますが、追加のアプリでは確認していません。もちろん、Twitter で選択できるリンクの多くは、実際の投稿内容ではなく、ツイートや Twitter ユーザー ページへのリンクであることに注意してください。

于 2016-07-27T21:36:12.410 に答える