2010-03-23 29 views
1

我做了一個非常簡單的AppleScript關閉標籤在Safari。問題是,它有效,但不完全。 只有幾個選項卡關閉。下面的代碼:如何使用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 2008年1月)上,以及在Tiger下的Mac Pro G5上,腳本都失敗了,儘管Tiger的描述性錯誤更少。

運行腳本幾次關閉幾個選項卡每個時間,直到沒有剩下,但總是關閉一些標籤後失敗,出現同樣的錯誤。在豹下,我得到了一個界限錯誤。由於我使用快速枚舉(不使用「重複從0到Windows中的項目數」),我不明白我怎麼能得到一個越界錯誤,這...

我的目標是使用Cocoa Scripting Bridge從我的Objective-C Cocoa應用程序中關閉Safari中的標籤,但Scripting Bridge以相同的方式失敗。非消除標籤顯示爲在Xcode調試NULL,而其他選項卡是有效對象從中我可以得到值回(如他們的稱號)。實際上,我首先嚐試了Scripting Bridge,然後告訴自己爲什麼不直接在AppleScript中嘗試這一點,我驚訝地看到了相同的結果。我似乎有一個明顯的遺漏或在那裏的東西......(似乎是Safari AppleScript支持給我的錯誤:S)我已經使用重複循環和Obj-C 2.0快速枚舉來遍歷之前收集的零問題,所以我真的沒有看到這裏有什麼問題。

任何人都可以幫忙嗎?

在此先感謝!

回答

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 
+0

是......你是對的,這是一個解決方案,關閉所有標籤頁,但我想我沒有問正確的問題。我的目標是基於他們的頭銜有條件地關閉標籤頁,所以我必須通過整個事情迭代和標籤的標題文字的現有的字典進行比較。 – Form 2010-03-23 20:37:07

+0

那裏我修改了我的問題。 – Form 2010-03-23 20:40:15

+0

我修改了我的答案 – mcgrailm 2010-03-23 21:13:45

4

我有一個腳本關閉所有選項卡,但不需要重複循環。

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 

看看是否適合你。

注:改變「堆棧溢出」到任何標題名稱是 要保持開放的標籤。

+0

這確實有效,是一個非常有趣的解決方案。雖然我將使用腳本橋可可,我不能使用此解決方案,我堅持用循環就我知道的。 – Form 2010-03-24 04:19:07

+0

我看不出有任何理由爲什麼這應該在腳本橋其實我是打算讓這個不行看到我的編輯來上述 – mcgrailm 2010-03-24 12:12:06

+0

清楚我想告訴你因爲某些原因無法工作,所以從頭開始關於看見上面的編輯 – mcgrailm 2010-03-24 13:52:20

相關問題