Ottieni URL errati dalla scheda corrente di Safari con Applescript

0

Il sito web my.yahoo.com ha un bug fastidioso (sono sorpreso che funzioni affatto), dove cliccando su uno dei suoi link a volte produce un URL come il seguente:

http://sports.yahoo.comhttps//sports.yahoo.com/news/rested-kings-ready-host-not-rested-hurricanes-082033171--nhl.html

Nell'esempio, puoi vedere che " link " viene ripetuto due volte. Volevo trovare il modo più semplice per correggere questi URL durante la navigazione. Purtroppo, non riesco nemmeno a eseguire l'azione necessaria prima , che consiste nel tirare l'URL dalla barra del titolo della scheda corrente. Si potrebbe pensare che l'invio del seguente comando a Safari in un oggetto Applescript funzionerebbe:

set thisTabUrl to the URL of the current tab in window 1

Purtroppo, a quanto pare, se l'URL non è valido, ottengo:

file:///Applications/Safari.app/Contents/Resources/

C'è un altro modo in cui posso convincere Safari a fornirmi il contenuto dell'area URL della scheda corrente per poi elaborarlo in Applescript, che tenterà quindi di impostare l'URL della scheda corrente nell'URL corretto e di aprire quella pagina ? Sono abbastanza sicuro di avere il resto del codice necessario, per aprire l'URL corretto in quella stessa scheda.

Per un credito extra, quale potrebbe essere il modo più semplice per avviare questo script quando incontri un URL così brutto durante la navigazione in Safari?

    
posta wtfk 10.12.2016 - 00:35
fonte

1 risposta

1

Ho provato numerose volte a riprodurre il problema, ma non ho potuto. Quindi questa soluzione è stata testata inserendo manualmente un URL standard due volte, tramite copia e incolla, e passando da lì. Ho anche utilizzato l'URL errato che hai mostrato nella tua domanda.

In Safari, questo essenzialmente cerca di creare un URL valido dal doppio URL usando AppleScript eseguito come un servizio Automator premendo B e imposta il documento corrente ( finestra, scheda) all'URL appropriato.

Crea un servizio di automazione con le impostazioni come mostrato nell'immagine sottostante e salvalo come:
Correggi l'URL non valido

Quindi in Preferenze di Sistema > Tastiera > Tasti di scelta rapida > Servizi, scorri verso il basso fino a Generale, seleziona
Correggi URL non valido, fai clic su Aggiungi collegamento e digita: B

CodiceAppleScriptperilserviziodiautomazione:

onbadURL()try--#PutthebadURLontheClipboard.tellapplication"Safari"
            activate
            delay 0.5
            tell application "System Events"
                key code 37 using {command down} # ⌘L
                delay 0.5
                key code 8 using {command down} # ⌘C
                delay 0.5
            end tell
        end tell
        --    # Retrieve the bad URL from the Clipboard.
        set theBadURL to get (the clipboard)
        --    # Trim the first eight characters off of 'theBadURL'.
        --    # This is done because the bad URL can have an occurrence of both 'http' and 'https' in the string in either
        --    # order and by trimming off, it lessens the amount of logic necessary to build a good URL from the bad URL.
        --    # The good URL, after all, is going to be built from what's after the second occurrence of either one. 
        --    # Test first for 'https' then 'http', as that makes more sense logically to do so.            
        set theBadURL to do shell script "awk 'BEGIN { print substr(\"" & theBadURL & "\", 9) }'"
        --    # Build the good URL from the bad URL.
        set theGoodURL to do shell script "awk -F 'https.*//' '{print $2}'<<<" & quoted form of theBadURL
        if theGoodURL is not equal to "" then
            set theGoodURL to "https://" & theGoodURL
        else
            set theGoodURL to do shell script "awk -F 'http.*//' '{print $2}'<<<" & quoted form of theBadURL
            if theGoodURL is not equal to "" then
                set theGoodURL to "http://" & theGoodURL
            end if
        end if
        return theGoodURL
    on error eStr number eNum
        display dialog eStr & " number " & eNum buttons {"OK"} default button 1 with icon caution
        return
    end try
end badURL

on run
    try
        tell application "Safari"
            activate
            set thisTabsURL to (get URL of current tab of window 1)
            --    # Check for bad URL and if found, build a good URL from it.
            tell current application
                if thisTabsURL contains "file:" then
                    set theGoodURL to my badURL()
                    tell application "Safari" to set the URL of the front document to theGoodURL
                end if
            end tell
        end tell
    on error eStr number eNum
        display dialog eStr & " number " & eNum buttons {"OK"} default button 1 with icon caution
        return
    end try
end run

Si noti che mentre ho provato questo sotto OS X 10.8.5 e macOS 10.12 e funzionava sotto le mie condizioni di test, tuttavia potrebbe non funzionare correttamente ogni volta in ogni condizione e quindi perché try e on error < em> istruzioni sono in uso nel codice . Si spera che questo intrappoli qualsiasi errore con output appropriato per migliorare il codice per gestire eventuali errori che non si sono verificati durante il mio test.

    
risposta data 11.12.2016 - 03:05
fonte

Leggi altre domande sui tag