我制作了一个非常简单的AppleScript来关闭Safari中的标签。问题是,它有效,但不完全。 只关闭了几个标签。以下是代码:
tell application "Safari"
repeat with aWindow in windows
repeat with aTab in tabs of aWindow
if [some condition is encountered] then
aTab close
end if
end repeat
end repeat
end tell
我也试过这个剧本:
tell application "Safari"
repeat with i from 0 to the number of items in windows
set aWindow to item i of windows
repeat with j from 0 to the number of tabs in aWindow
set aTab to item j of tabs of aWindow
if [some condition is encountered] then
aTab close
end if
end repeat
end repeat
end tell
...但它也不起作用(相同的行为)。
我在我的系统(MacBook Pro jan 2008)以及Tiger下的Mac Pro G5上尝试了这一点,并且脚本都失败了,尽管Tiger的描述性错误要少得多。
每次运行脚本几次会关闭几个选项卡,直到没有剩余,但在关闭几个选项卡后总是会失败并出现相同的错误。在Leopard下我得到一个越界错误。由于我使用的是快速枚举(不使用“从0重复到窗口中的项目数量”),我看不出我怎么能得到一个越界错误...
我的目标是使用Cocoa Scripting Bridge从我的Objective-C Cocoa应用程序中关闭Safari中的选项卡,但脚本桥以相同的方式失败。不可删除的选项卡在Xcode调试器中显示为NULL
,而其他选项卡是有效的对象,我可以从中获取值(例如它们的标题)。事实上,我首先尝试使用Scripting Bridge然后告诉自己为什么不直接在AppleScript中尝试这一点,我很惊讶地看到相同的结果。
我必须有一个明显的遗漏或其他东西......(似乎是Safari AppleScript支持我的一个错误......:S)我使用了重复循环和Obj-C 2.0快速枚举来迭代收藏之前没有问题,所以我真的不明白这里有什么问题。
任何人都可以提供帮助吗?
提前致谢!
答案 0 :(得分:5)
我有一个关闭所有标签但不需要重复循环的脚本。
set closeTab to "Stack Overflow" as string
tell application "Safari"
close (every tab of window 1 whose name is not equal to closeTab)
end tell
看看它是否适合你。
注意:将“Stack Overflow”更改为标题名称 您要保持打开的标签。
答案 1 :(得分:4)
这对我而言非常简单
tell application "Safari"
close every window
end tell
好的,你必须从计数到1,否则当你关闭窗口时计数将被关闭
tell application "Safari"
repeat with i from (count of windows) to 1 by -1
repeat with j from (count of tabs of window i) to 1 by -1
set thistab to tab j of window i
set foo to name of thistab
if foo is not equal to "bar" then close thistab
end repeat
end repeat
end tell
答案 2 :(得分:0)
两个提供的答案都很好,但我认为最好将两者结合起来。通过这种方式,您将关闭所有 chrome 窗口的所有选项卡,并且比第一个答案更简洁:
set closeTab to "Post Attendee" as string
tell application "Google Chrome"
repeat with i from (count of windows) to 1 by -1
close (every tab of window i whose name is not equal to closeTab)
end repeat
end tell