【问题标题】:Issues with "On Open" Applescript handler in Yosemite优胜美地中“打开”Applescript 处理程序的问题
【发布时间】:2015-05-03 20:02:58
【问题描述】:

在 OSX 10.10 (Yosemite) 中使用 Applescript 时,Apple 似乎改变了一些默认行为。

on open dropped_files
   display dialog (count of dropped_files)
end open

这个非常基本的 Applescript 突出了这个问题。如果我从 Finder 中选择一组 6 个文件,然后拖放到该脚本的编译版本上,我会得到响应“2”,然后是响应“4”。它应该响应“6”......但它几乎就像 Finder 正在将文件解析成更小的组一样。如果我再次这样做,我会得到不同的数字组合,所以它似乎不一致。

这不是我的应用程序所期望的行为,有什么解决方案的想法吗?我从未在旧版本的 Applescript 中看到过这种行为。

【问题讨论】:

  • 在#macdev 中讨论此问题后,我已将此作为错误提交给苹果(报告# 20021353)。在此期间仍对其他解决方法持开放态度!
  • 部分文件是否被隔离?您可以使用终端检查:“xattr -p com.apple.quarantine /path/to/file”。
  • 非常有趣的建议,克里斯!根据我的评论,这正是正在发生的事情。它将隔离文件作为一组提交,将非隔离文件作为另一组提交。相当令人惊讶的行为。使用以下命令删除隔离属性后: sudo xattr -dr com.apple.quarantine * 它报告了正确的文件数。
  • 我也更新了错误报告。

标签: applescript osx-yosemite


【解决方案1】:

哇,真奇怪。这种解决方法似乎有效。我们可以利用属性和在“on open”处理程序之后自动运行的“on quit”处理程序。因此,只需使用 dFiles 在“退出”处理程序中运行您的正常代码。请记住在最后将 dFiles 设置为 {},否则 dFiles 在您下次删除文件时将无法正常工作。

property dFiles : {}

on open dropped_files
    set dFiles to dFiles & dropped_files
end open

on quit
    display dialog (count of dFiles)
    set dFiles to {}
    continue quit
end quit

【讨论】:

  • 感谢您的建议!它起作用了,但是在重新运行脚本时,它使数字成倍增加……例如7,然后是 14,然后是 21,当我将相同的文件列表拖到它上面时。我不确定为什么它没有将自己重置为零。原来它与隔离有关,我只是不明白为什么它会拆分隔离文件组。它还将按顺序处理这些文件,例如1 - 已隔离 2 - 未隔离 3 - 未隔离 4 - 已隔离 5 - 未隔离 当它在隔离和非隔离之间交替时,它将在计数中报告为 1、2、1、1。
  • 您需要在脚本末尾的“set dFiles to {}”行将其重置为零。
  • 我把它包括在里面了。也许它不适用于已编译的脚本?
【解决方案2】:

这种奇怪的效果是由于文件被隔离造成的。可以使用以下命令检查隔离文件:

xattr -p com.apple.quarantine *

根据隔离/非隔离文件的排序顺序,它将为每个组(无论是隔离的还是非隔离的)单独执行“打开时”处理程序:例如,1 - 隔离,4 - 非隔离,3 - 隔离。您会注意到在此示例中提交了两组隔离文件,这是因为该特定列表是如何排序并提交给 on open 处理程序的。

这种行为相当令人惊讶,我已将其作为错误报告提交给 Apple。可以使用以下命令删除隔离属性:

sudo xattr -dr com.apple.quarantine *

显示正确的文件数。另外,请参阅上面 regulus6633 的 Applescript 技巧以获得巧妙的解决方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多