Я отлаживаю что-то для коллеги, который находится в отпуске и мало что знает о разработке Safari Extension.Получить данные URL и заголовка страницы из SafariNavigateEvent
У меня есть расширение Safari, которое прослушивает события 'open', 'beforeNavigate', 'navigate' и 'activate'. Когда какое-либо из этих событий увольняется, я хочу отслеживать URL-адрес activeTab и заголовок страницы.
Похоже, что в некоторых случаях (а именно beforeNavigate и навигации при открытии новой вкладки) заголовок страницы не всегда определяется либо объектом safari.application.activeBrowserWindow.activeTab
, либо объектом event
, переданным моим обработчикам.
Когда я печатаю объект события на консоль, он заполняется правильно, но если я получаю доступ к event['target']['title']
непосредственно в обработчике событий, он возвращается Untitled
. Я бы предположил, что есть задержка в заполнении данных, но я не могу понять, как справиться с задержкой, и не могу найти на ней никакой документации.
FYI У меня есть доступ к веб-сайту для ВСЕХ в моем info.plist.
Кто-нибудь сталкивался с этой проблемой? Любые мысли о том, как это исправить?
Он фрагмент кода:
safari.application.addEventListener("beforeNavigate", function (event) {
console.log('//-- Event Data -------------------------------------');
console.log(event);
console.log(event['target']);
console.log('Url: ' + event['target']['url']);
console.log('Title: ' + event['target']['title']);
console.log('//-- Tab Data -------------------------------------');
console.log('Url: ' + safari.application.activeBrowserWindow.activeTab.url);
console.log('Title: ' + safari.application.activeBrowserWindow.activeTab.title);
}, true);
И выход на консоль:
//-- Event Data -------------------------------------
SafariBeforeNavigateEvent
BUBBLING_PHASE: 3
CAPTURING_PHASE: 1
TARGETING_PHASE: 2
bubbles: true
cancelable: true
currentTarget: null
defaultPrevented: false
eventPhase: 0
target: SafariBrowserTab
browserWindow: SafariBrowserWindow
page: SafariWebPageProxy
reader: SafariReader
title: "Google"
url: "https://www.google.ca/"
__proto__: CallbackObject
timeStamp: 1379353767889
type: "beforeNavigate"
url: "http://www.google.ca/"
__proto__: CallbackObject
SafariBrowserTab
browserWindow: SafariBrowserWindow
page: SafariWebPageProxy
reader: SafariReader
title: "Google"
url: "https://www.google.ca/"
__proto__: CallbackObject
Url:
Title: Untitled
//-- Tab Data -------------------------------------
Url:
Title: Untitled
Спасибо за ответ Matt. Я отметил это как правильно. Для моего случая лучшим решением было бы, чтобы вложенный сценарий отправил заголовок страницы и URL-адрес в фоновый скрипт. К сожалению, события, выпущенные из Safari, оказались бесполезными при отслеживании этих данных. Даже события навигации сообщают название страницы undefined или Untitled. В конечном итоге ИМО события должны быть способ сделать это. Ну что ж. – adampetrie