2

Safari でタブを閉じるための非常に単純な AppleScript を作成しました。問題は、それが機能することですが、完全ではありません。いくつかのタブだけが閉じられています。コードは次のとおりです。

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 では説明的なエラーははるかに少ないものの、スクリプトは両方で失敗します。

スクリプトを数回実行すると、タブがなくなるまで毎回いくつかのタブが閉じられますが、いくつかのタブを閉じた後は常に同じエラーで失敗します。Leopard では、範囲外のエラーが発生します。私は高速列挙を使用しているため(「ウィンドウ内のアイテムの数を 0 から数まで繰り返す」を使用していません)、これで境界外エラーを取得する方法がわかりません...

私の目標は、Cocoa Scripting Bridge を使用して、Objective-C Cocoa アプリケーションから Safari のタブを閉じることですが、Scripting Bridge は同じように失敗します。削除できないタブは Xcode デバッガーのように表示さNULLれますが、他のタブは値 (タイトルなど) を取得できる有効なオブジェクトです。実際、私は最初に Scripting Bridge を試してから、これを AppleScript で直接試してはどうかと自分に言い聞かせましたが、同じ結果が得られて驚きました。

そこに明らかな省略か何かがあるに違いありません...(私にはSafari AppleScriptサポートのバグのように思えます... :S)私は繰り返しループとObj-C 2.0高速列挙を使用して、コレクションをゼロで反復処理しました問題があるので、ここで何が問題なのかわかりません。

誰でも助けることができますか?

前もって感謝します!

4

3 に答える 3

7

すべてのタブを閉じるスクリプトがありますが、繰り返しループは必要ありません。

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

それがあなたのために働くかどうか見てください。

注: 「スタック オーバーフロー」を、開いたままにしたいタブのタイトル名に変更します。

于 2010-03-23T22:41:47.947 に答える
0

提供された両方の回答は問題ありませんが、両方を組み合わせた方がよいと思います。このようにして、すべてのクロムウィンドウのすべてのタブを閉じます。最初の回答よりも冗長ではありません。

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
于 2021-02-08T16:19:06.667 に答える