Verbindung ist ungültiger Fehler beim Ausführen von Applescript und Safari

Das folgende Applescript wartet darauf, dass eine Seite geladen wird, bevor es mit dem do javascript "document.body.innerText"Teil des Skripts fortfährt. Es scheint wirklich gut zu funktionieren, bis auf eine Sache. Wenn Safari ausgeführt wird, aber derzeit kein Fenster geöffnet ist, führt die Ausführung dieses Skripts zu

Fehler "Safari hat einen Fehler: Verbindung ist ungültig." Nummer -609

Wenn ich dies jedoch ausführe, wenn Safari geschlossen ist, startet es Safari, geht zur angegebenen URL und führt nach dem Laden der Seite den Javascript-Teil aus. Ich verstehe nicht, warum eine Fehlermeldung angezeigt wird, wenn Safari ohne geöffnete Fenster ausgeführt wird.

tell application "Safari"
    activate
    if not (exists document 1) then reopen
    tell front document
        set URL to "http://example.com"
        repeat until length of (source as text) is not 0
            delay 0.5
        end repeat
        do javascript "document.body.innerText"
    end tell
end tell

Der Fehler hebt immer den source as textTeil des Skripts hervor. Ich habe versucht, length of (source as text) is not 0zu zu wechseln repeat until name is "example domain", aber der Fehler tritt immer noch auf, wenn keine Fenster geöffnet sind und Safari läuft.

Antworten (2)

Sie müssen die Position der activateCodezeile mit der Codezeile tauschen .if not (exists document 1) then reopen

Beispiel:

tell application "Safari"
    if not (exists document 1) then reopen
    activate
    tell front document
        set URL to "http://example.com"
        repeat until length of (source as text) is not 0
            delay 0.5
        end repeat
        do javascript "document.body.innerText"
    end tell
end tell

Der folgende Screenshot des Skript-Editors wurde mit geöffnetem Safari und ohne geöffnete Fenster ausgeführt.

Fenster des Skripteditors

Zuerst musste ich „[√] Entwicklungsmenü in Menüleiste anzeigen“ (Safari > Einstellungen… > Erweitert) aktivieren und dann im Menü „Entwickeln“ auf „JavaScript von Apple-Ereignissen zulassen“ klicken. Als nächstes habe ich Ihren AppleScript- Code kopiert und in den Skript-Editor eingefügt und auf die Schaltfläche "Skript ausführen" geklickt , und es wurde ohne Fehler ausgeführt und der Text der Webseite http://example.com zurückgegeben. Safari wurde jedoch geschlossen, als ich das Skript zum ersten Mal ausführte.

Nachdem ich Ihre Frage erneut gelesen hatte, konnte ich den Fehler reproduzieren, indem ich Safari ohne geöffnete Fenster geöffnet hatte. Ich habe mir dann Ihren Code genauer angesehen und festgestellt, activatedass es vorher war if not (exists document 1) then reopenund activatedanach sein muss, um den Fehler zu vermeiden.

activateAm falschen Ort zu sein, ist mir nie in den Sinn gekommen. Funktioniert jetzt perfekt. Vielen Dank für die Lösung einer weiteren meiner Apple-bezogenen Fragen.

Das Zurücksetzen meiner Einstellungsdatei hat dies für mich behoben. Halten Sie dazu die Tasten Befehlstaste + Wahltaste + Strg + Umschalttaste gedrückt, während Sie die Indesign-Anwendung öffnen.

Indesign-Version 15.0.1 Mac OS Catalina 10.15.7

Vielen Dank für die Ablehnung und die Nichterklärung der Ablehnung. Das hat bei mir tatsächlich funktioniert.
Meine Vermutung wäre, da es sich bei der Frage um AppleScript und Safari handelt , was haben Indesign und das Drücken der Tasten Command+Option+Control+Shift mit der gestellten Frage zu tun!? Hast du zufällig deine Antwort auf die falsche Frage gepostet?
Lassen Sie sich von Downvotes nicht unterkriegen (kein Wortspiel beabsichtigt). Es ist nur das Internet. ;) Allerdings bin ich mir nicht sicher, was Indesign mit der Frage zu tun hat.