Action Extension で ブラウザのタイトルを取得する方法を調べていました。
↓こちらのサイトを参考にしました。
例えば、Safari から Action Extension で 別のアプリを立ち上げると、
URLは取得できるが、タイトルが取得できない。
これを、javascript を組み込むことによって可能になることがわかりました。
DemoPreprocessor.js
var MyPreprocessor = function() {}; MyPreprocessor.prototype = { run: function(arguments) { arguments.completionFunction({"url": document.URL, "title": document.title}); //arguments.completionFunction({"URL": document.URL, "pageSource": document.documentElement.outerHTML, "title": document.title, "selection": window.getSelection().toString()}); } }; var ExtensionPreprocessingJS = new MyPreprocessor;
info.plistのNSExtensionActivationRuleと同じ階層に、NSExtensionJavaScriptPreprocessingFileと JSファイル名を追加。
ActionViewController.swift
override func viewDidLoad() { super.viewDidLoad() for item in self.extensionContext!.inputItems { let inputItem:NSExtensionItem = item as! NSExtensionItem for (provider) in inputItem.attachments! { let itemProvider = provider as NSItemProvider if itemProvider.hasItemConformingToTypeIdentifier(String(kUTTypePropertyList)) { itemProvider.loadItem(forTypeIdentifier: String(kUTTypePropertyList), options: nil,completionHandler: { (item, error) in if let dictionary = item as? NSDictionary { let results = dictionary[NSExtensionJavaScriptPreprocessingResultsKey] as! NSDictionary let url:String = results["url"] as! String let title:String = results["title"] as! String print(title) print(url) } }) } } } }