Я пытаюсь получить информацию о странице активной вкладки для отображения во всплывающем окне.Я могу заставить его отображать URL или заголовок страницы в настоящее время, но для этого требуется дважды открыть и закрыть всплывающее окно расширения.
Я полагаю, это потому, что для получения этой информации приведенный ниже код опирается на completionHandler
, что делает его асинхронным.
SFSafariApplication.getActiveWindow { (window) in
window?.getActiveTab { (tab) in
tab?.getActivePage(completionHandler: { (page) in
page?.getPropertiesWithCompletionHandler( { (properties) in
self.pageTitle = properties?.title ?? "Unknown"
self.ActivePageTitle.stringValue = self.pageTitle
})
})
}
}
При первом открытии всплывающего окна он отображает пустую текстовую область, но во второй раз он загружает информацию ранее и показывает ее правильно.
Я пытался запустить его в viewDidLoad()
, но он срабатывает только при первом открытии всплывающего окна.
При запуске в viewWillAppear()
появляется следующая ошибка:
pid(17738)/euid(501) is calling TIS/TSM in non-main thread environment,
ERROR : This is NOT allowed. Please call TIS/TSM in main thread!!!
Я подумал, что, возможно, переключение расширения на использование command
вместо этого сработает, но потом понял, что вы не можете программно открыть всплывающее окно.
Нужно ли переключаться на UITableView
или что-то, что имеетreloadData()
функция, запускаемая после завершения асинхронного запроса данных?
MacOS 10.14.4 |Safari 12.1 |Xcode 10.2