Action Extension で ブラウザのタイトルを取得する方法

Action Extension で ブラウザのタイトルを取得する方法を調べていました。

↓こちらのサイトを参考にしました。

swift-salaryman.com

例えば、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)
}
})
}
}
}
}

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA