Applescript - Lesezeichen für alle Tabs in ALLEN FENSTER in Safari

Safari, haben die Bookmark all tabs Funktion im Menü Bookmarks-> Add Bookmarks for these N tabs. Ich suche nach einer Möglichkeit, dies automatisch mit Applescript in allen geöffneten Safari-Fenstern zu tun.

Mit anderen Worten, wollen

  1. Wählen Sie einen Lesezeichenordner aus, sagen Sie "Favoriten -> Sitzungen".
  2. durchlaufen Sie alle Safari-Fenster
  3. Wenn das Fenster nur einen TAB hat, fügen Sie es einfach in den obigen Ordner ein
  4. ansonsten
    • Rufen Sie den Menüpunkt Bookmarks-> aufAdd Bookmarks for these N tabs
    • Füllen Sie das Popup-Fenster automatisch aus (z. B. Saved Tabs window1, Saved Tabs window2... etc.)
  5. wiederhole ab 2

Hier https://gist.github.com/kshiteesh/b72e93d31d65008fcd11 ist ein nettes Applescript, (auch ähnlich dieses , das ein guter Ausgangspunkt für die Entwicklung sein könnte, aber zuerst hier fragen - vielleicht hat das jemand schon gemacht. :)

Irgendwelche Hilfe, bitte?

Ps - Motivation - Die neue Richtlinie von Apple (Blockieren der Unterstützung für ältere Safari-Erweiterungen) hat leider dazu geführt, dass eine der "must-to-have" Safari-Erweiterungen - Sessions - in Safari 12 nicht mehr funktioniert. Suchen Sie also nach einer selbst entwickelten Funktionalität.

Nur aus Neugier, warum sollten Sie so viele Seiten mit Lesezeichen versehen? Und warum sollten Sie viele Fenster geöffnet lassen, anstatt eines mit mehreren Registerkarten?
@MateusRibeiro - möchte nur Lesezeichenseiten, wenn ich den Browser beende. Ein Fenster? Lol - nur so zum Spaß - jetzt habe ich 9 Fenster in 4 Desktops geöffnet und jedes Fenster hat 1 bis 9 geöffnete Tabs ... Einfach an mehreren Themen gleichzeitig arbeiten (browsen) ... Habe zum Beispiel 1 Fenster (2 Tabs) für Stackexchange (Stackoverflow und das), 1 Fenster Youtube – nur 1 Tab, 1 Fenster Arduino (9 Tabs), 2 Fenster über World of Warcraft 3 & 6 Tabs), 2 Fenster für das Firmenintranet (1x Hauptbuch), 1x für die Verwaltung meiner Mitarbeiter , und 2 weitere Fenster für andere nicht näher bezeichnete Dinge.. :) :) Ich bin ziemlich beschäftigt.. :)
Firefox hat beim Neustart optional alle Fenster und Tabs neu geöffnet. Hat Safari nicht dasselbe?
@historystamp Lassen Sie die Sitzung als Liste aller Registerkarten in allen Fenstern definieren . Dann ist das Öffnen der letzten Sitzung (wie Sie sagten) etwas ganz anderes als die Möglichkeit, einen Sitzungsverlauf zu speichern und abzurufen. Klicken Sie einfach auf die Seite des getöteten Addons , um zu sehen, wovon ich spreche. Bookmarken ist nicht die optimale Lösung, aber besser als nichts...
Danke für die Erwähnung der Sitzungen. Ich sammle heutzutage zu viele Tab-Fenster.
Ich wäre etwas pessimistisch, wenn es darum geht, diese Funktion in der neuesten Safari zum Laufen zu bringen. „Sessions werden auf Safari 12 oder höher nicht installiert, da Apple Safari-Erweiterungen offiziell als veraltet markiert hat“ von der Seite, die Sie verlinkt haben. Wenn der Sitzungsautor nicht herausfinden kann, wie die Funktion auszuführen ist, warum sollte es jemand anderes tun können? Kürzlich habe ich versucht, Javascript für Safari zu schreiben. Es scheint, dass Apple die kostenlose App zum Einfügen von Javascript entfernt hat. Ich müsste 100 Dollar bezahlen, um eine Entwicklerlizenz zu bekommen. Ich bin im Yosemite.
Sie müssen erwägen, auf einen anderen Browser umzusteigen. Apple ist zum Antagonisten von DIY geworden. Ich habe dieses vier Jahre alte Skript gefunden, das etwas in der von Ihnen gewünschten Richtung zu tun scheint. Sehen Sie, ob Sie es installieren und zum Laufen bringen können. apple.stackexchange.com/questions/212132/… ​​Wenn ja, sollte jemand in der Lage sein, es so zu ändern, dass es genau das tut, was Sie wollen. Poste deine Ergebnisse zurück. Ich könnte versuchen, es dazu zu bringen, das zu tun, was Sie brauchen, wenn Sie es zum Laufen bringen können. Natürlich müsste ich in der Lage sein, Javascript kostenlos in Safari einzuschleusen.
Ich benutze heute Waterfox. Es ist ein Klon von Firefox. Unterstützt ältere Firefox-Erweiterungen. Es scheint ein Trend zu sein, DIY-Bemühungen in Webbrowsern zu unterdrücken. Chrome ist eine weitere Möglichkeit, aber es hat die gleiche Einschränkung wie der moderne Firefox.
@historystamp Ja, ich habe auch mit dem Autor der "Sessions" gesprochen und eine Spende angeboten, aber leider sagt er, dass es aufgrund der Tötungspolitik von Apple nicht möglich ist, weiterzumachen. Also verwende ich jetzt einen Automator-Workflow (Applescript & Perl), um die URLs in Dateien (nach Datum) zu speichern. Ich habe es noch nicht als Antwort gepostet, da es halbwegs in benutzerdefiniertem installiertem Perl geschrieben ist und einige Perl-Module verwendet - zB ist es weit von der Benutzerfreundlichkeit eines durchschnittlichen Mac-Benutzers entfernt.

Antworten (1)

Wie ich im obigen Kommentar sagte, verwende ich jetzt eine selbst entwickelte Automator-Workflow-App.

Ich bin ein perlSprachentwickler, also verwende ich im Workflow einen benutzerdefinierten Perl-Interpreter und viele Perl-Module - definitiv KEINE Lösung für einen durchschnittlichen (normalen) Mac-Benutzer.

Aber es zu posten, hauptsächlich als Referenz und vielleicht könnte jemand es zu einer besseren Lösung hacken. Wie es funktioniert - wie man es benutzt:

  • Leider muss es manuell ausgeführt werden - ich kann nicht herausfinden, wie ein Automator-Workflow (Dienst oder App) ausgeführt wird, wenn Safari das quitEreignis empfängt. :(

  • Das Automator (Service)-Skript hat zwei Aktionen:

    • javascript ausführen (ich weiß es applescriptnoch nicht Javascript, aber das Javascript ist für mich verständlicher) - es sammelt einfach alle URL's aus allen Tabs und Fenstern und erstellt eine JSON-Struktur, die an die nächste weitergegeben wird
    • Führen Sie ein Shell-Skript aus - das mein Perl-Skript mit einem benutzerdefinierten installierten Perl-Interpreter ausführt.
  • Wenn die App ausgeführt wird, speichert sie eine HTMLDatei im Ordner Sessionsin my Desktop.
  • Der Name der Datei ist zB wie s20190107-164908.htmlder aktuelle Datum-Uhrzeit-String.
  • Es ist einfach, die Quick-Look-Funktion des Finders (Leertaste) zu verwenden, um den Inhalt der Datei schnell zu überprüfen.

Es ist weit über das ursprüngliche SessionsAddon hinaus, aber es ist für mich brauchbar.

Geben Sie hier die Bildbeschreibung ein

Der vollständige Inhalt der oben genannten Aktionen ist:

1.) das Javascript

function run(input, parameters) {
    var tablist = [];
    var Safari = Application('Safari');
    Safari.includeStandardAdditions = true;
    Safari.activate();
    var windows = Safari.windows();
    for(let iw=0, wsize=windows.length; iw<wsize; iw++) {
        var wintabs = [];
        var tabs = windows[iw].tabs();
        if (!tabs) continue;
        for(let it=0, tsize=tabs.length; it<tsize; it++) {
            if( tabs[it].url() ) {
                wintabs.push( {"name": tabs[it].name(), "url": tabs[it].url()} );
            }
        }
        if( wintabs.length ) {
            tablist.push(wintabs);
        }
    }
    return JSON.stringify(tablist);
}

und das Shell-Skript

export ANYENV_ROOT=/opt/anyenv
export PATH="$ANYENV_ROOT/bin:$PATH"
eval "$(anyenv init -)"

perl -MJSON -MPath::Tiny -MTime::Piece -M5.014 -w -E '
    my $jsonstr = do { local $/; <STDIN> };
    my $j = decode_json($jsonstr);
    my @lines;
    lsay("<ol>");
    for my $w (@$j) {
        lsay("<li><ul>");
        for my $t (@$w) {
            my $astr = "<li><a href=\"$t->{url}\">$t->{name}</a></li>";
            lsay($astr);
        }
        lsay("</ul></li>");
    }
    lsay("</ol>");
    my $sessdir=path( $ENV{HOME}, "Desktop/Sessions");
    $sessdir->mkpath;
    my $sessfile=$sessdir->child(localtime->strftime("s%Y%m%d-%H%M%S.html"));
    $sessfile->spew_utf8(@lines);;
    sub lsay { push @lines, $_ for @_ }
'

Beispiel was sehen Sie im Quick-Look:

Geben Sie hier die Bildbeschreibung ein

Wie ich bereits sagte - es ist KEINE Lösung für einen gewöhnlichen Benutzer. Es kann nur von Entwicklern verwendet werden ... :(

Interessante App, nicht für Sie: fireeye.com/blog/threat-research/2017/03/…
Vielleicht könnten Sie einen Keylogger wie Keyboard Maestro installieren und die Beendigungsereignisse abfangen, Ihre Skripte ausführen und dann die Beendigung neu starten. sehr zerbrechlich Sie könnten sicherlich Befehl + q fangen, wenn Sie nicht sicher sind, ob Sie mit der Maus herumfahren.
Ich habe ein Javascript-Programm für Waterfox entwickelt. Es fängt den Benutzer ab, der Befehl+s eingibt. Sie könnten ein Javascript schreiben, um abzufangen, was der Benutzer tut, und Ihre App aufrufen, wenn der Benutzer beendet. Discussions.apple.com/docs/DOC-250000368
@historystamp Das Hauptproblem besteht darin, dass das Javascript des Automators nicht innerhalb von Safari ausgeführt wird. Es ist eine Applescript-Umgebung - Javascript, kein Browser-Javascript = andere Umgebung, z. B. keine Seitenladeereignisse und dergleichen. Ihr Skript im Pastebin erfasst den Tastendruck in einem Javascript, das in einem Browser ausgeführt wird. Auch wie gesagt, meine Javascript-Kenntnisse sind schrecklich. Danke trotzdem.