Applescript: Aktuelle Safari-Registerkarte in Chrome öffnen (Fehlerbehebung bei funktionierendem Skript)

Also habe ich mich vor einiger Zeit entschieden, Safari ohne Flash zu installieren. Es war wirklich großartig, Safari wirkt insgesamt viel stabiler und ich vermisse es kaum.

Aber hin und wieder stolpere ich über eine Seite, die Flash benötigt (hauptsächlich YouTube-Videos, was meiner Meinung nach kein Problem darstellen würde, da Google eigentlich alles auf HTML5 umstellen sollte), also habe ich für diese Fälle ein Appescript die ausgeführt wird, wenn sie durch einen Alfred-Workflow (mit einem Hotkey) ausgelöst wird. Das Skript ist als solches:

tell application "Safari"

    set theURL to URL of current tab of window 1

end tell

tell application "Google Chrome"

    if windows ≠ {} then
        make new tab at the end of window 1 with properties {URL:theURL}
    else
        make new window
        set URL of active tab to theURL
    end if
    activate

end tell

tell application "Safari"

    close current tab of window 1

end tell

Dies läuft normalerweise perfekt, aber ich stoße auf ein seltsames Problem, wenn Chrome kein offenes Fenster im Hintergrund hat. In diesen Fällen öffnet Chrome ein neues (leeres) Fenster und das Skript stoppt genau dort. Die dritte Tell-Anweisung,

 tell application "Safari"

    close current tab of window 1

end tell

Wird nie ausgeführt und hinterlässt bei mir ein offenes Chromfenster und ein offenes Safari-Fenster. Erst nachdem ich den Hotkey ein zweites Mal drücke, nachdem das Chrome-Fenster bereits geöffnet ist, führt das Skript seinen Lauf aus und öffnet die Seite in Chrome / schließt den Tab in Safari.

Irgendwelche Ideen? Ich bin wirklich verwirrt darüber, dass die dritte Tell-Anweisung überhaupt nicht ausgeführt wird. Wenn das Chrome-Fenster leer geöffnet wird, aber der Safari-Tab immer noch geschlossen ist, würde ich vermuten, dass es sich um einen einfachen Fehler in der if/else-Anweisung handelt, aber die Tatsache, dass das Skript zu beenden scheint, verblüfft mich wirklich.

Sie wissen, dass Safari dafür eine eingebaute Funktion hat, oder? Develop-> Open Page With-> Google Chrome. Sie können Hotkey für diese Aktion in den Systemeinstellungen zuweisen
Ja, aber das ist tatsächlich Teil eines größeren Skripts, mit dem ich in beide Richtungen dasselbe tun kann. Safari zu Chrome und Chrome zu Safari. Im Gegensatz zum Skript schließt die von Ihnen erwähnte Methode auch nicht das Safari-Fenster, das in Chrome geöffnet wird.

Antworten (2)

Nur weil Safari und Chrome laufen, bedeutet das nicht, dass sie ein Fenster geöffnet haben. Sie können entweder nach offenen Fenstern suchen, wie Mark betont, oder einfach den Befehl zum erneuten Öffnen ausgeben, der ein neues Fenster öffnet, wenn eines nicht vorhanden ist.

tell application "Google Chrome"
    if not (exists window 1) then reopen
    -- insert your code 
end tell

tell application "Safari"
    if not (exists document 1) then reopen
    -- insert your code 
end tell

BEARBEITEN

tell application "Safari"
    if not (exists document 1) then return
    set theURL to URL of current tab of window 1
    close current tab of window 1
end tell

tell application "Google Chrome"
    if not (exists window 1) then reopen
    set URL of active tab of window 1 to theURL
end tell
Eine Ablehnung ohne Erklärung?
@adayzone, Die "richtige Methode" ist, was in Bezug auf diese Frage zu tun?
Hallo Mark. Die richtige Methode, um sicherzustellen, dass entweder Chrome oder Safari ein Fenster geöffnet hat, um die Fehler zu vermeiden, die Carlos erhält, besteht darin, den Befehl zum erneuten Öffnen auszugeben. Wenn es existiert, lässt es das aktuelle Fenster unverändert, wenn nicht, öffnet es ein neues
Ja, ich bin mir nicht sicher, was ich damit machen soll :/. Es mag für jemanden mit etwas mehr Applescript-Kenntnissen offensichtlich sein, aber für mich persönlich lässt mich diese Antwort tatsächlich mit mehr Fragen zurück xD (nebenbei bemerkt, Sie haben tatsächlich einige meiner Fragen zuvor beantwortet, also danke dafür!)
Ahhh, ich verstehe jetzt, Sie beziehen sich speziell auf die Verwendung von "reopen" ... Ich verstehe, worauf Sie hinauswollen.
@adayzdone, wenn Sie Ihre Antwort mit einer ausführlicheren Erklärung aktualisieren, stimme ich gerne wieder ab :-). Sie können auch berücksichtigen, ob Safari in Topsits erneut geöffnet wird: Sie erhalten möglicherweise eine Fehlermeldung, da dies keine URL ist
Die Bearbeitung funktioniert einwandfrei! Es behebt tatsächlich ein kleines Ärgernis mit der anderen Methode, bei der, wenn Chrome überhaupt nicht geöffnet wäre, das neue Fenster mit zwei Registerkarten geöffnet würde (einer leeren und der mit dem gesendeten Inhalt). Danke!
"Wenn Safari in Topsits erneut geöffnet wird: Möglicherweise erhalten Sie eine Fehlermeldung, da dies keine URL ist". Deshalb habe ich es aus meinem EDIT ausgeschlossen. Ich werde eine Erklärung hinzufügen.
@Carlos Ich sehe, was du mit den beiden Registerkarten meinst. Das ist ärgerlich. Und ich wollte vorschlagen, dass Sie die Antwort von adayzone akzeptieren. Aber das hast du ja schon :-)
@markhunte haha ​​Ich bin ehrlich, ich habe mich ein bisschen schlecht gefühlt, weil ich deine nicht akzeptiert habe! Ich würde hoffen, dass es eine Möglichkeit gibt, beide zu erkennen, abgesehen von positiven Stimmen, da beide nicht nur dazu beigetragen haben, mein Problem zu lösen, sondern auch mein Verständnis von Applescript zu vertiefen. Aber da es nur eine geben kann und ich am Ende die Version von adayzdone verwendet habe, muss ich diese akzeptieren :) Nochmals vielen Dank!
@ Carlos fühle mich nicht schlecht. Sie haben in diesem Fall meiner Meinung nach das Richtige getan, und ich wollte Ihnen vorschlagen, dies zu tun. Sie können meine immer als hilfreich bewerten, wenn Sie es so finden.
@markhunte Ich habe deine Antwort wegen zusätzlicher Registerkarten abgelehnt. Bearbeiten Sie es und ich werde es rückgängig machen.
@adayzdone Ich werde es so lassen wie es ist. In der Frage wurde nicht darum gebeten, den zusätzlichen Tab zu eliminieren. Das war ein Bonus in Ihrer Antwort. Und darauf ging meine Antwort nicht ein. Fühlen Sie sich frei, nach oben oder unten zu stimmen. Es ist alles konstruktiv. Wie meine ursprüngliche Ablehnung Ihrer Antwort, die Sie dazu veranlasste, eine umfassendere, bessere Antwort zu geben, die nicht verwirrend war und am Ende deshalb akzeptiert wurde.
Hoppla. Ich muss angenommen haben, Carlos wollte keine zusätzliche Rechnung. In jedem Fall kann die Abstimmung nicht rückgängig gemacht werden, bis eine Änderung vorgenommen wurde.

Alfred schützt Sie möglicherweise vor einem Fehler, der auftritt, wenn Chrome ausgeführt wird, aber keine Fenster geöffnet sind.

Google Chrome hat einen Fehler erhalten: Aktiver Tab kann nicht auf "http....." gesetzt werden.

Ändere die Zeilen

  make new window
  set URL of active tab to theURL

Zu

set theWindow to make new window

set URL of active tab of theWindow to theURL
Ah, also war es eine Alfred-Sache? Ich dachte zuerst, dass dies der Fall gewesen sein könnte, aber die ganze Last-Tell-not-Execution-Sache ließ mich denken, dass es etwas Besonderes zu tun war. mit Applescript. Dein Fix hat aber super funktioniert! Danke!