2017-02-03 19 views
0

Я пытаюсь автоматизировать блокировку всплывающих окон в Safari. Я попытался следующие значения по умолчанию операция записиAppleScript для блокировки всплывающих окон Safari

defaults write com.apple.Safari WebKit2JavaScriptCanOpenWindowsAutomatically -boolean false 

Но это не в состоянии сделать это. Я также пытался установить его как истину, но даже это не помогло. В настоящее время я пытаюсь найти способ сделать это с помощью AppleScript. Это то, что я написал до сих пор -

CMD_ACTIVATE='tell application "Safari" to activate' 
CMD_NEWTAB='tell application "System Events" to keystroke "," using {command down}' 
osascript -e "$CMD_ACTIVATE" -e "$CMD_NEWTAB" 

Это открывает свои предпочтения, но тогда я рисую пробел. Кто-нибудь с предложениями о том, как действовать? Также мне не нужно решение для этого только в AppleScript любым другим способом сделать это было бы также полезно.

Примечание: Я использую Mac OS только неделю, и я не так хорошо разбираюсь в нюансах этой ОС, поэтому, пожалуйста, будьте немного описательными при ответе. Спасибо.

ответ

0

Блокирование всплывающего окна осуществляется через Safari/preferences/tab Безопасность, где вам необходимо установить правильный флажок.

Это предпочтение, похоже, хранится в файле библиотеки/предпочтений com.safari.plist, который содержит флаг com.apple.Safari.ContentPageGroupIdentifier.WebKit2JavaScriptCanOpenWindowsАвтоматически со значением Да, когда всплывающие окна заблокированы.

Однако это может быть не единственное место для изменения, и в любом случае оно официально не задокументировано, так что это место может быть изменено Apple в любое время. Это не рекомендуется использовать.

Возвращаясь к Applescript, потому что Safari довольно плох с точки зрения обработки событий applescript, вы вынуждены проходить через графический интерфейс. Это то, что вы начали, но имейте в виду, что если Apple изменит расположение окна настроек Safari, ваш сценарий должен быть пересмотрен.

При использовании графического интерфейса GUI (который, опять же, должен быть только тогда, когда не найдено ни одного другого решения), вы должны понимать структуру объектов GUI. Окно содержит кнопку, флажок, панель инструментов ... в иерархической модели. Например, окно предпочтений в Safari содержит приведенную ниже панель инструментов, объект «группа 1» сам по себе содержит много объектов в зависимости от выбора текущего инструмента. После того, как вы понимаете эту концепцию, ниже скрипт, который делает то, что вы ищете, будет легко понять, с большим количеством комментариев:

tell application "Safari" to activate 
tell application "System Events" 
keystroke "," using {command down} 
delay 0.2 -- leave sometime to open window 
tell window 1 of process "Safari" 
    click button 6 of toolbar 1 -- Security button is number 6 
    delay 0.2 
    -- check if check box not yet set and set it. 
    if (value of checkbox 5 of group 1 of group 1) = 0 then click checkbox 5 of group 1 of group 1 
end tell 
delay 0.2 
click button 1 of window 1 of process "Safari" -- click on red/close button 
end tell 

Я бегу на сафари 10.0.3. Если ваша версия отличается, окно предпочтений может отличаться. Затем скрипт должен быть скорректирован: кнопка вкладки «Безопасность» может быть больше не номером 6 в вашей версии, ...

+0

Эй, спасибо за это. Но я сталкиваюсь с несколькими проблемами. Я запускаю Safari 9.1.2, и в этой версии вкладка «Безопасность» имеет всего 5 флажков, а опция «всплывающее окно» блокировки - это третья. Оставляя это в стороне, он даже не меняет вкладки, на котором вы написали «tell window 1 процесса» Safari »нажмите кнопку 6 панели инструментов 1' – ShdwKnght333

+0

Извините, только этот оператор дает ошибку' tell window 1 процесса «Safari» и ошибка «144: 145: синтаксическая ошибка: ожидаемый конец строки, но найден» «». (-2741) ⁠⁠⁠⁠' – ShdwKnght333

+0

Вот что я упомянул в своем ответе: любая разница в макетах окон Safari заставляет графический интерфейс меняться. Я сделал это с Safari 10.0.3, и вы должны настроить его на макет окна настроек в 9.1.2. Кроме того, проверьте, что команда «,» также открывает окно настроек в вашей версии. О синтаксической ошибке, если «отсутствует», возможно, это потому, что вы не скопировали правильно сценарий. Убедитесь, что все открытия «имеют закрытие». – pbell