Le 20 mai 08 à 14:10, Dominique Isperian a écrit :
> Bonjour à tous !
>
> Question : est-il possible de passer un paramètre à un script via une
> url ?
>
> iCal permet d'inscrire une url qui, entre autres, ouvre un fichier,
> voire une application (file://localhost/Users/...)
> Puis-je passer un ou des paramètres au script que je déclencherais par
> ce moyen ?
>
> Voilà voilà ... et merci pour vos réponses !
> --
> Dominique
C'est tout à fait faisable de lancer un script avec en plus des
paramètres par URL. D'ailleurs on peut lancer n'importe quoi par URL +
arguments sous Mac OS X.
Dans iCal je ne vois pas trop l'intérêt, j'ai dû louper quelque chose,
mais peu importe.
Ceci est faisable avec un type (protocole) d'URL quelconque.
(J’éviterais de surcharger (d'utiliser) les plus connus http, file,
mailto, etc..., mais je n'ai pas essayé). C''est valable pour tout
type d'application dans Mac OS X, pas seulement les applets.
Pour les applets, ça tombe bien, c'est décrit en détail à :
<
http://www.apple.com/applescript/linktrigger/index.html>
Avec en prime une implémentation de serveur de scripts (optionnelle).
En résumé:
1) Modifier le fichier Info.plist de l'applet, pour signaler au
système (LaunchServices je présume) le(s) type(s) d'URL géré/
accepté(s) par l'application.
2) Dans le code utiliser le handler (gestionnaire) AS qui va récupérer
l'URL:
on open location theURL
-- parsage de l'URL et lancement des actions.
end open location
3) C'est tout.
Je viens d'essayer ceci (exemple de protocole fabriqué pour l'occasion)
<
x-toto://net.totor.testURL?action=1&action=2>
Testé avec open (Terminal), iCal, et ici dans Mail: ça marche sans
problème. J'ai bien un dialogue avec 1 et 2.
Extrait du fichier Info.plist:
...
<key>CFBundleIdentifier</key>
<string>net.totor.testURL</string>
...
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>x-toto URL</string>
<key>CFBundleURLSchemes</key>
<array>
<string>x-toto</string>
</array>
</dict>
</array>
...
Le code AS:
[SCRIPT]
on open location u
set zs to last item of tinkerText(u, "?")
set zs to tinkerText(zs, "&")
repeat with z in zs
set {k, v} to tinkerText(z, "=")
if k = "action" then
doIt(v)
end if
end repeat
end open location
on doIt(z)
activate
display dialog z
end doIt
--mark (-
--mark Text tools<I<U!+
--=============================== Text tools
================================--
(* v1.2.2 *)
on tinkerText(z, d) (* bascule text <-> list *)
try
set _d to AppleScript's text item delimiters
set AppleScript's text item delimiters to d
considering case
if class of z is list then
set r to z as text
else
set r to text items of z
end if
end considering
set AppleScript's text item delimiters to _d
return r
on error ert number ern from obj
set AppleScript's text item delimiters to _d
-- stampError(ert, ern, obj, "tinkerText()")
error ert number ern
end try
end tinkerText
--=============================== /Text tools
===============================--
[/SCRIPT]
Un petit truc: le Finder et Cie sont des feignasses, et parfois il
faut bouger l'applet d'un dossier à un autre (par exemple) pour qu'ils
prennent en considération les changements d’Info.plist.
Ton autre question: Pour récupérer une sélection (n'importe laquelle)
dans iCal, je ne vois pas non plus. Même par UI scripting, niet...
A+
--
Daniel
_______________________________________________
Applescript_fr mailing list
Applescript_fr@???
http://listes.patpro.net/mailman/listinfo/applescript_fr