Я пытаюсь получить URL-адрес и заголовок документа из самого верхнего документа / вкладки Safari. У меня есть AppleScript и целевая версия c с использованием инфраструктуры Apple Scripting Bridge.
Обе версии работают нормально для большинства веб-страниц, однако, когда я открываю видео Youtube в полноэкранном режиме, происходит сбой версии на основе Scripting Bridge. Apple Script отлично работает для "нормальных" и полноэкранных окон Safari.
Может кто-нибудь увидеть, что не так с кодом Scripting Bridge, приведенным ниже, чтобы он не работал в полноэкранных окнах Safari?
Вот код (я пропустил проверку ошибок для краткости):
AppleScript:
tell application "Safari"
# Give us some time to open video in full-screen mode
delay 10
do JavaScript "document.title" in document 0
end tell
Мост сценариев:
SafariApplication* safari = [SBApplication applicationWithBundleIdentifier:@"com.apple.Safari"];
SBElementArray* windows = [safari windows];
SafariTab* currentTab = [[windows objectAtIndex: 0] currentTab];
// This fails when in full-screen mode:
id result = [safari doJavaScript: @"document.title" in: currentTab];
NSLog(@"title: %@", result);
Ошибка моста сценариев (с добавлением разрывов строк):
Apple event returned an error. Event = 'sfri'\'dojs'{
'----':'utxt'("document.title"),
'dcnm':'obj '{ 'want':'prop',
'from':'obj '{ 'want':'cwin',
'from':'null'(),
'form':'indx',
'seld':1 },
'form':'prop',
'seld':'cTab' }
}
Error info = {
ErrorNumber = -1728;
ErrorOffendingObject = <SBObject @0x175c2de0:
currentTab of SafariWindow 0 of application "Safari" (238)>;
}
Я не смог найти подробную информацию о данном коде ошибки. Он жалуется на «currentTab», который показывает, что событие JavaScript, по крайней мере, добралось до Safari. Я предполагаю, что текущая вкладка получает событие, но отказывается запускать код JS, потому что он находится в полноэкранном режиме. Однако почему это работает для AppleScript? Разве они не используют один и тот же путь кода?
Любые предложения приветствуются. Спасибо!