Properties 我可以找出AppleScript对象是否具有特定属性吗?

Properties 我可以找出AppleScript对象是否具有特定属性吗?,properties,applescript,bbedit,Properties,Applescript,Bbedit,我正试图编写BBEdit脚本,让我从TextMate来到这里时感觉更自在。我需要能够做的一件事是查看我有引用的对象是否具有特定属性 例如: tell application "BBEdit" tell front window get selected items end tell end tell 这将在项目窗口上成功,但在磁盘浏览器窗口上不会成功,因为后者没有“选定项”属性。如何查看对象中是否存在这样的属性 请注意:我知道如何在脚本编辑器(获取属性)中检查对

我正试图编写BBEdit脚本,让我从TextMate来到这里时感觉更自在。我需要能够做的一件事是查看我有引用的对象是否具有特定属性

例如:

tell application "BBEdit"
    tell front window
        get selected items
    end tell
end tell
这将在项目窗口上成功,但在磁盘浏览器窗口上不会成功,因为后者没有“选定项”属性。如何查看对象中是否存在这样的属性


请注意:我知道如何在脚本编辑器(获取属性)中检查对象以查看其属性,但我需要在运行时知道它们是什么。

到目前为止,我唯一的解决方案是将其包装在错误处理程序中:

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

我没有bbedit,因此无法检查,但是如果存在不同类型的窗口,并且每种类型的窗口都有不同的属性,那么您不能先检查窗口类型吗?然后你就会知道你可以得到什么类型的属性。窗口必须有一些基本属性来告诉您它的类型或种类,或者任何有助于您做出决定的属性。

在BBEdit中,
文档和
窗口之间有区别<代码>窗口
文档
的一个元素,但只有
窗口
具有
选择
属性,因此您可以先检查窗口的类型,避免完全捕获错误(从而使代码更清晰)

另外,尝试使用
selection
属性,这是BBEdit中的硬属性,而不是“selected items”,因为
selection
将始终返回可用的对象,即使只有
插入点

该类如何

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

它不是我所追求的
选择
属性:它是
所选项目
。这只出现在窗口类型(例如项目窗口)的特定子集上。因为每种窗口都继承自
窗口
,所以我可以获取最前面的
窗口
,但不知道窗口的类型。我看不到一处能告诉你这种情况的房产。我想我来自python风格的duck类型:我不关心它是什么类型的窗口:我关心它是否有
selected items
属性,支持最后一条评论:我不想知道每种类型的窗口都有一个
选择的项目
属性:我想知道最前面的窗口是否有它。如果BBEdit添加了更多具有此属性的窗口类型,则必须在具有此属性的窗口类型中进行硬编码将意味着需要更多的工作。请注意:我不是在进行选择:这很容易,因为每个文档都具有此属性。这是
所选项目
,只有一部分窗口类型具有此功能。一些有用的相关问题: