Ich habe vergessen, wie man eine Registerkarte anhand ihres Namens findet und den Wert zurückgibt (z. B. Registerkarte 2) und die Registerkarte schließlich auch als aktive Registerkarte festlegt.
Ich habe folgendes versucht, aber es funktioniert nicht:
set titleString to "
"
tell application "Google Chrome"
set window_list to every window # get the windows
repeat with the_window in window_list # for every window
set tab_list to every tab in the_window # get the tabs
repeat with the_tab in tab_list # for every tab
set the_title to the title of the_tab # grab the title
if the_tab contains (Name to search" as text) then
display notification "the_tab"
end if
return # concatenate
end repeat
end repeat
end tell
Ich habe auch versucht, etwas mit JavaScript zu starten:
tell application "Google Chrome"
set window_list to every window
repeat with the_window in window_list
set tab_list to every tab in the_window
tell tab_list to set TheTab to execute javascript "document.title"
end repeat
end tell
Aber dann bekomme ich:
{«Klasse CrTb» ID 4 von Fenster-ID 1 der Anwendung "Google Chrome", «Klasse CrTb» ID 9 von Fenster-ID 1 der Anwendung "Google Chrome", «Klasse CrTb» ID 2 von Fenster-ID 1 der Anwendung "Google Chrome ", «class CrTb» id 189 of window id 1 of application "Google Chrome"} versteht die "Execute"-Meldung nicht.
Wie kann ich vorgehen?
Da Sie sich nicht sicher sind, wie umfassend das ist, was Sie erreichen möchten, ist der folgende Code möglicherweise mehr als Sie benötigen. Es ermöglicht jedoch die Suche nach dem Namen der Registerkarte und legt dann die Registerkarte, die die Suchzeichenfolge enthält, als active tab
.
Der folgende Code ist eine Überarbeitung des Codes, der in Find Safari Tabs with AppleScript präsentiert wird . Es wäre schön gewesen, zu wechseln zu können tell application "Safari"
und tell application "Google Chrome"
das Skript funktionierte, aber aufgrund der Unterschiede in den Eigenschaften eines Tabs zwischen den beiden Apps würde das nicht funktionieren.
Was dieses Skript macht:
active tab index
, was bedeutet, dass Tab jetzt der aktuelle Tab ist. Wenn mehr als ein Fenster vorhanden ist, wird das Fenster mit diesem Tab vor allen anderen Google Chrome-Fenstern nach vorne gebracht.active tab index
, was bedeutet, dass die Registerkarte jetzt die aktuelle Registerkarte ist. Wenn mehr als ein Fenster vorhanden ist, wird das Fenster mit diesem Tab vor allen anderen Google Chrome-Fenstern nach vorne gebracht.set searchString to text returned of (display dialog "Enter a string to search for:" default answer "" with title "Find Google Chrome Tab")
tell application "Google Chrome"
set win_List to every window
set win_MatchList to {}
set tab_MatchList to {}
set tab_NameMatchList to {}
repeat with win in win_List
set tab_list to every tab of win
repeat with t in tab_list
if searchString is in (title of t as string) then
set end of win_MatchList to win
set end of tab_MatchList to t
set end of tab_NameMatchList to (id of win as string) & ". " & (title of t as string)
end if
end repeat
end repeat
if (count of tab_MatchList) is equal to 1 then
set w to item 1 of win_MatchList
set index of w to 1
my setActiveTabIndex(t, searchString)
else if (count of tab_MatchList) is equal to 0 then
display dialog "No match was found!" buttons {"OK"} default button 1
else
set which_Tab to choose from list of tab_NameMatchList with prompt "The following Tabs matched, please select one:"
if which_Tab is not equal to false then
set oldDelims to (get AppleScript's text item delimiters)
set AppleScript's text item delimiters to "."
set tmp to text items of (which_Tab as string)
set w to (item 1 of tmp) as integer
set AppleScript's text item delimiters to oldDelims
set index of window id w to 1
my setActiveTabIndex(t, searchString)
end if
end if
end tell
on setActiveTabIndex(t, searchString)
tell application "Google Chrome"
set i to 0
repeat with t in tabs of front window
set i to i + 1
if title of t contains searchString then
set active tab index of front window to i
return
end if
end repeat
end tell
end setActiveTabIndex
Die Frage ist drei Jahre alt, aber ich nehme an, dass andere ihren Weg hierher finden können, so wie ich es getan habe, also ist meine Antwort hier an Sie gerichtet, die Person, die derzeit darüber nachdenkt, wie dies zu tun ist:
Ist es Ihr Ziel, dies manuell oder programmgesteuert zu tun? Benötigen Sie eine Codelösung, die Sie in eine Automatisierung einfügen können, die Sie erstellen, oder ist dies Ihre erste Annahme, wie Sie Ihr UI-Ziel erreichen können, indem Sie in der Lage sein, die gewünschte Registerkarte zu finden, während Sie interaktiv arbeiten?
Wenn Sie später nur einen von 54 Tabs finden müssen, die auf 11 Fenster in 7 Desktop-Bereichen verteilt sind, dann empfehle ich die Chrome-Erweiterung "Tabs".https://chrome.google.com/webstore/detail/tabs/cdbepibloojgbmnofbejfgglmdlifadj
Die Quelle für diese kostenlose Erweiterung befindet sich auf GitHub. Wenn Sie in Chrome auf das Symbol klicken, wird ein Popup geöffnet, das alle geöffneten Registerkarten nach Fenster auflistet und den Fokus auf ein Suchfeld legt, sodass Sie sofort eine Suchzeichenfolge eingeben können. Während Sie tippen, werden die Ergebnisse eingegrenzt. Wenn Sie den gesuchten Registerkartennamen sehen, klicken Sie darauf und Sie gehen sofort dorthin, egal in welchem Desktopbereich und Fenster.
Ich benutze "Tabs" mehrmals am Tag.
Benutzer3439894
AppleScript's text item delimiters
, um den vorherigen Zustand zu berücksichtigen und ihn zurückzusetzen, nachdem ich ihn geändert habe, um das zu erhalten, waswindow id
aus demlist
Dialogfeld zurückgegeben wird . In diesem speziellen Fall wäre es wirklich nicht wichtig gewesen, diesen Code nur in einem bestimmten Skript zu verwenden. Es wird jedoch als bessere Programmierpraxis angesehen, dies beim Ändern einer Standardeinstellung zu tun.Kevin