Могу ли я узнать, есть ли у объекта AppleScript определенное свойство?

Я пытаюсь написать сценарий BBEdit, чтобы я чувствовал себя как дома, приходя из TextMate. Одна вещь, которую я должен уметь делать - это видеть, обладает ли объект, на который я ссылаюсь, определенным свойством.

Например:

tell application "BBEdit"
    tell front window
        get selected items
    end tell
end tell

Это будет успешно выполнено в окне проекта, но не в окне браузера диска, поскольку последнее не имеет свойства "выбранные элементы". Как узнать, есть ли такое свойство в объекте?

Обратите внимание: я знаю, как проверить объект в редакторе сценариев (получить свойства), чтобы увидеть, какие свойства у него есть, но мне нужно знать, какие они есть во время выполнения.

4 ответа

Решение

Как насчет класса?

tell application "BBEdit"
  if class of window 1 is disk browser window then
    # ...
  else
    # ...
  end if
end tell

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

Есть разница между documents а также windows в BBEdit. Windows являются элементом documents, но только windows иметь selection свойство, так что вы можете сначала проверить тип окна и полностью избежать перехвата ошибок (и в результате сделать код более чистым).

Кроме того, попробуйте использовать selection свойство, которое является жестким свойством в BBEdit, а не "выбранными элементами", потому что selection всегда будет возвращать полезный объект, даже если только insertion point,

Единственное решение, которое у меня есть, - это обернуть его в обработчик ошибок:

try
    set sel to selected items
on error errMsg number errNum
    if errNum is -1700 then
        -- Code that handles no selected items attribute
        return
    end
    error errMsg number errNum
end try
-- Code that handles when selected items attribute exists
Другие вопросы по тегам