Доступ к информации о текущей странице в Safari 12 Extension Popover - PullRequest
1 голос
/ 14 апреля 2019

Я пытаюсь получить информацию о странице активной вкладки для отображения во всплывающем окне.Я могу заставить его отображать 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

1 Ответ

0 голосов
/ 22 апреля 2019

Вы можете получить SFSafariPageProperties объект в SafariExtensionHandler и использовать этот объект в SafariExtensionViewController .

- (void)popoverWillShowInWindow:(SFSafariWindow *)window {
    [window getActiveTabWithCompletionHandler:^(SFSafariTab *activeTab) {
        [activeTab getActivePageWithCompletionHandler:^(SFSafariPage *page) {
            [page getPagePropertiesWithCompletionHandler:^(SFSafariPageProperties *properties) {
                // Now you can use "properties" in viewController using shareObject
            }];
        }];
    }];
}

Теперь необходимо снова получить свойства SFSafariPage в viewWillAppear.

...