0 votes

Obtenir une mauvaise URL à partir de l'onglet actuel de Safari avec Applescript

Le site web my.yahoo.com a un bug irritant (je suis surpris qu'il fonctionne) où cliquer sur un de ses liens produit parfois une URL telle que la suivante :

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

Dans l'exemple, vous pouvez voir que " http://sports.yahoo.com "est répété deux fois. Je voulais trouver le moyen le plus simple de corriger ces URL en surfant. Malheureusement, je ne peux même pas effectuer le premièrement l'action nécessaire, qui consiste à extraire l'URL de la barre de titre de l'onglet en cours. On pourrait penser que l'envoi de la commande suivante à Safari dans un Applescript fonctionnerait :

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

Malheureusement, apparemment, si l'URL est invalide, j'obtiens :

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

Existe-t-il un autre moyen d'inciter Safari à me donner le contenu de la zone d'URL de l'onglet actuel pour le traiter dans l'Applescript, qui tentera ensuite de définir l'URL de l'onglet actuel sur l'URL correcte et d'ouvrir cette page ? Je suis pratiquement sûr d'avoir le reste du code nécessaire pour ouvrir l'URL correct dans ce même onglet.

Pour un crédit supplémentaire, quelle serait la manière la plus simple de lancer ce script lorsqu'on rencontre une telle mauvaise URL en surfant dans Safari ?

1voto

user3439894 Points 52496

J'ai essayé de nombreuses fois de reproduire le problème, mais je n'y suis pas parvenu. J'ai donc testé cette solution en entrant manuellement deux fois une URL standard, par copier-coller, et en partant de là. J'ai également utilisé la mauvaise URL que vous avez indiquée dans votre question.

Dans Safari, il s'agit essentiellement d'essayer de construire une URL valide à partir de la double URL à l'aide d'un AppleScript exécuté en tant que service Automator lorsque vous appuyez sur la touche B et définit le document actuel (fenêtre, onglet) à l'URL appropriée.

Créez un service Automator avec les paramètres indiqués dans l'image ci-dessous et enregistrez-le sous :
Corriger une mauvaise URL

Puis, dans Préférences système > Clavier > Raccourcis > Services, faites défiler jusqu'à Général, sélectionnez
Fixer une mauvaise URL, cliquez sur Ajouter un raccourci et tapez : B

Fix Bad URL Automator Service


AppleScript code pour le service Automator :

on badURL()
    try
        --    # Put the bad URL on the Clipboard.
        tell application "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

Notez que, bien que j'aie testé cette méthode sous OS X 10.8.5 et MacOS 10.12 et qu'elle ait fonctionné dans mes conditions de test, il se peut qu'elle ne fonctionne pas correctement à chaque fois et dans toutes les conditions. try y on error déclarations sont utilisés dans le code . Nous espérons que cela permettra de détecter toute erreur et d'obtenir un résultat approprié afin d'améliorer l'efficacité du système. code pour gérer toute(s) erreur(s) qui ne se sont pas produites pendant mes tests.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X