2 votes

Applescript pour surligner du texte dans Chrome en utilisant Javascript

Je n'arrive pas à comprendre comment adapter ce script, qui met du texte en surbrillance dans Safari, pour le faire fonctionner avec Google Chrome :

set myList to {"AppleScript", "2018", "demo@apple.com"}

tell application "Safari"
    'window.find()' command change the scroll position when it select the founded string
    set scrollPos to do JavaScript "document.designMode = 'on'; [window.pageXOffset.toString(),window.pageYOffset.toString()]" in document 1
    repeat with thisText in myList
        do JavaScript "var sel = window.getSelection();\n                sel.collapse(document.body, 0);//------    To start at the beginning of the document, not after the selectioned text\n                while (window.find('" & thisText & "', true)) {document.execCommand('HiliteColor', false, '#5cdf64');}\n                sel.collapseToEnd()" in document 1
    end repeat

    -- restore the scroll position
    do JavaScript "document.designMode = 'off';  window.scrollTo(" & (item 1 of scrollPos) & ", " & (item 2 of scrollPos) & ")" in document 1
end tell

Voici ma version de Google Chrome :

set myList to {"AppleScript", "2018", "CLOSED"}

tell application "Google Chrome"
    tell tab 3 of window 1 to set scrollPos to execute javascript "document.designMode = 'on'; [window.pageXOffset.toString(),window.pageYOffset.toString()]"

    repeat with thisText in myList
        execute javascript "var sel = window.getSelection();\n                sel.collapse(document.body, 0);//------    To start at the beginning of the document, not after the selectioned text\n                while (window.find('" & thisText & "', true)) {document.execCommand('HiliteColor', false, '#5cdf64');}\n                sel.collapseToEnd()"
    end repeat
    execute javascript "document.designMode = 'off';  window.scrollTo(" & (item 1 of scrollPos) & ", " & (item 2 of scrollPos) & ")"
end tell

Réponse :

tell application "Google Chrome"
    execute tab 3 of window 1 javascript "document.designMode = 'on'; [window.pageXOffset.toString(),window.pageYOffset.toString()]"
        --> {"0", "0"}
    execute current application javascript "var sel = window.getSelection();\n                sel.collapse(document.body, 0);//------    To start at the beginning of the document, not after the selectioned text\n                while (window.find('AppleScript', true)) {document.execCommand('HiliteColor', false, '#5cdf64');}\n                sel.collapseToEnd()"
        --> missing value
    execute current application javascript "var sel = window.getSelection();\n                sel.collapse(document.body, 0);//------    To start at the beginning of the document, not after the selectioned text\n                while (window.find('2018', true)) {document.execCommand('HiliteColor', false, '#5cdf64');}\n                sel.collapseToEnd()"
        --> missing value
    execute current application javascript "var sel = window.getSelection();\n                sel.collapse(document.body, 0);//------    To start at the beginning of the document, not after the selectioned text\n                while (window.find('CLOSED', true)) {document.execCommand('HiliteColor', false, '#5cdf64');}\n                sel.collapseToEnd()"
        --> missing value
    execute current application javascript "document.designMode = 'off';  window.scrollTo(0, 0)"
        --> missing value
end tell
Result:
missing value

5voto

grg Points 181593

Assurez-vous d'avoir activé JavaScript depuis AppleScript dans Google Chrome

L'exécution de JavaScript par AppleScript est désactivée. Pour l'activer, dans la barre de menus, cliquez sur Affichage > Développeur > Autoriser JavaScript à partir des événements Apple.

J'ai apporté quelques modifications à votre script pour qu'il fonctionne, les modifications étant mises en évidence en gras.

  • La variable scrollPos et sa gestion du défilement par l'obtention et la définition de la position de la fenêtre étant superflues, toutes les références à cette variable ont été supprimées.
  • Tous les verbes d'exécution doivent tell window 1 et non un seul verbe. J'ai ajouté to tell window 1 au tell d'accompagnement de la demande.
  • Le verbe exécuter prend une référence et une chaîne JavaScript, et pas seulement du JavaScript. Il vous manque la référence dans tous vos verbes d'exécution.

    set myList to {"AppleScript", "2018", "CLOSED"}

    tell application "Google Chrome" to tell window 1 execute active tab javascript "document.designMode = 'on';" -- scrollPos and page offset removed

    repeat with thisText in myList
        execute **active tab** javascript "var sel = window.getSelection();
                    sel.collapse(document.body, 0);
                    while (window.find('" & thisText & "', true)) {document.execCommand('HiliteColor', false, '#5cdf64');}
                    sel.collapseToEnd()"
    end repeat
    execute **active tab** javascript "document.designMode = 'off';" **\-- scrollPos and page offset removed**

    end tell

Pour l'exécuter sur tous les onglets, il faut l'entourer de repeat with atab in tabs :

tell application "Google Chrome" to tell window 1
    **repeat with atab in tabs**
        execute **atab** javascript "document.designMode = 'on';" -- scrollPos and page offset removed

        repeat with thisText in myList
            execute **atab** javascript "var sel = window.getSelection();
                    sel.collapse(document.body, 0);
                    while (window.find('" & thisText & "', true)) {document.execCommand('HiliteColor', false, '#5cdf64');}
                    sel.collapseToEnd()"
        end repeat
        execute **atab** javascript "document.designMode = 'off';" -- scrollPos and page offset removed
    **end repeat**
end tell

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