AppleScript et Safari
Greensource
Membre
Bonjour! Je suis tout nouveau dans le monde AppleScript mais je pense que je vais en avoir besoin.
J'ai créer un installeur où à la fin j'ai besoin de mettre un signet dans Safari (Plustard il me faudra le faire sous Firefox).
Je voulais savoir si AppleScript me permettrais de le faire? A priori je penses que oui car il me semble avoir lu que justement AppleScript permettais de "piloter" les applications Mac.
Et d'autres part j'ai aussi besoin de monter un serveur de fichier (smb://@IP etc) automatiquement dans le petit menu à gauche dans le Finder. Tout du moins je voudrais au moins que le raccourci reste et que l'utilisateur n'ai qu'à cliquer dessus, ça demande son mot de passe et ensuite il est connecté.
Idem, vous pensez que c'est faisable avec AppleScript?
Merci
J'ai créer un installeur où à la fin j'ai besoin de mettre un signet dans Safari (Plustard il me faudra le faire sous Firefox).
Je voulais savoir si AppleScript me permettrais de le faire? A priori je penses que oui car il me semble avoir lu que justement AppleScript permettais de "piloter" les applications Mac.
Et d'autres part j'ai aussi besoin de monter un serveur de fichier (smb://@IP etc) automatiquement dans le petit menu à gauche dans le Finder. Tout du moins je voudrais au moins que le raccourci reste et que l'utilisateur n'ai qu'à cliquer dessus, ça demande son mot de passe et ensuite il est connecté.
Idem, vous pensez que c'est faisable avec AppleScript?
Merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Pour piloter les applications scriptables, tu peux utiliser AppleScript ou directement les Apple Events. AppleScript pilote les applications en générant des Apple Events. Les Apple Events sont programmés en C.
Pour savoir si tu peux créer un signet dans Safari, tu dois ouvrir son dictionnaire, soit dans Xcode, soit dans l'éditeur de Script.
Je te conseille, pour évaluation, d'utiliser l'éditeur de script et d'ouvrir les scripts qui sont dans le "dossier des scripts de l'ordinateur".
C'est trop dommage, il suffirais d'un add bookmark :-\\
Une autre idée pour faire ça?
Pourquoi se limiter à Safari et Firefox ? Tu pourrait ouvrir l'URL de la page html qui t'interesse dans le Browser par défaut de l'utilisateur. Charge à lui d'en garder ou non un signet. Pour cela, NSWorkSpace doit marcher:
[[NSWorkSpace sharedWorkspace] openURL:(URL_de_la_page)] ;
Et idem dans mon cahier des charges l'installeur doit avoir mis en place le bookmark tout seul.
A voir si c'est manipulable avec les NSUserDefaults (j'en doute), sinon à lire via un [NSDictionary dictionaryWithContentsOfFile:...], modifier, et réécrire. Avec la question de savoir ce qui se passe si Safari est lancé pendant la manip, est-ce que quitter Safari ne risque pas (j'en ai peur) de réécrire le fichier...
Sinon tu peux tenter de creuser la piste javascript, voir si une commande javascript ne permettrait pas de faire ça (quitte ensuite à appeler la commande "do javascript" en AppleScript avec le code javascript adéquat), mais je crois que pour Safari y'a pas.
Dernière solution, piloter directement l'UI de Safari, si les préférences d'accessibilité sont réglées pour le permettre bien sûr, pour envoyer des AppleEvents genre "sélectionner le menuitem 'Ajouter un Signet' puis rentrer tel texte puis valider"... mais bon bof.
La solution la plus propre à mon avis reste d'ouvrir la page dans Safari (ou autre) avec openURL comme mentionné par tablier, et d'afficher un message (via javascript ou via ton appli) genre "pensez à ajouter cette page dans vos signets en tapant Pomme-D".
Sinon ta solution d'ouvrir une page (je le fait déjà en fin d'install) et puis de faire penser à l'enregistrer est pas mal, d'autant que ça laisse le choix à l'utilisateur.
Merci
[edit] - Nickel il y a tout ce qu'il faut dans le PList, je vais me faire un petit programme de test pour essayer.
Sinon est-ce qu'il y a le même genre de fichier pour le menu du Finder? Je parle du petit menu à gauche avec le Home, Music...
set content of textfield 2 of window 1 to "le texte à écrire"
Pas explicite !!!
J'ai donc un programme qui va chargé le fichier Bookmarks.plist qui se trouve dans:
/Users/pduchene/Library/Safari
Je le modifie pour ajouter mes bookmarks et hop le tour est joué!
Sauf que ça ne marche que sous ma session évidemment puisque j'ai configurer le chemin comme ça. ::)
"Super simple" je me dit, juste à remplacé "/Users/pduchene" par "~" et hop ça marchera pour tout le monde!
...
Et bas non! Pas moyen! :-\\ Je ne sais pas trop comment du coup, voiçi le code qui coince:
plistPath étant la NSString qui doit contenir le chemin vers mon fichier de bookmarks.
Faut juste utiliser les bonnes méthodes genre la méthode [tt]stringByExpandingTildeInPath[/tt] de NSString. (Et utiliser stringByAppendingPathComponent pour composer ton chemin c'est mieux aussi à la limite, plus générique)
Ou sinon partir de NSHomeDirectory() qui te retourne une NSString contenant le chemin vers le home (/Users/pduchene), auquel tu rajoutes ton chemin vers le plist...
Ou encore mieux, utiliser la méthode NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask,YES) pour récupérer la liste des chemins (typiquement tu n'en n'auras qu'un, "/Users/tonuser/Library/") vers le dossier Library qui sont dans le UserDomain, ce qui est encore plus propre et générique. Il ne te restera plus qu'à appeler [tt][userLibDirPath stringByAppendingPathComponent:@Safari][/tt] pour récupérer le bon dossier, et encore une fois avec Bookmarks.plist pour obtenir le plistPath.
--> cf la doc ici (et bien sûr la doc de NSString avec toutes les méthodes pour manipuler les paths)
Dans quels cas:
Pourrais ne pas fonctionner? C'est juste au cas Apple changerais le nom de "Library" ou l'endroit ou est mis User?
Mais si un jour Apple décide de changer ce dossier de place ou de nom, et de réorganiser ainsi l'arborescence des dossiers de base du système, par exemple de renommer le dossier "Library" en "Settings" et de la mettre dans un dossier "UserSettings/tonuserid" (je dis n'importe quoi), bah la dernière solution continuera de fonctionner.
Certes, c'est super méga improbable. Et si vraiment Apple le fait un jour dans une future version de OSX, il communiquera massivement dessus. Mais bon au moins t'es à l'abri.
Une autre raison d'utiliser cependant ce type de code, c'est si tu souhaites porter ton appli sur iPhone : l'arborescence des fichiers sur iPhone étant différente (chaque appli possède une "sandbox", un espace dans le filesystem qui lui est réservé en fait) et donc les chemins d'accès différents, ce code continuera de faire pointer sur le bon dossier "Library" sur iPhone alors que le chemin en dur ne marchera pas... Mais bon en même temps vu ton cas spécifique, sur iPhone le fichier Bookmarks.plist s'il existe ne se trouve peut-être pas à cet endroit, et de toute façon c'est pas dit que tu puisses y accéder contrairement à sous OSX... donc bon.
/Users/...
mais dans
/var/root/...
Et là il y a pas de Safari
Je vais étudier le problème :P
Il dois y avoir plusieurs path avec
NSSearchPathForDirectoriesInDomains faut que je trouve le bon
ps: sais tu comment lancé le debug avec root dans Xcode du coup pour mes tests?
Dans mon script qui lance le programme j'ai écrit:
Mais ce qui est incroyable c'est que quand je lance ce script en ligne de commande, $USER = root, ce qui me semble normal puisque je fait un sudo en lançant le script.
Là ou ça deviens franchement bizarre, c'est que quand le script est lancé par l'installeur, là $USER = pduchene!!! Alors que l'installeur me demande bien mon mot de passe admin!!!
Il va maintenant falloir que je fasse la même chose pour Firefox! Par contre les gros malin utilise le format JSON! Pouvais pas faire comme Apple ^^
Quelqu'un a une idée de où peut bien être cacher le fichier de bookmark de Firefox? Parce que bizarrement j'ai trouvé toute les sauvegardes (~/Library/Application Support/Firefox/Profiles/trucchelou.default/bookmarksbackups/)
Mais ya pas celui qui est chargé au lancement on dirait.
Si je dit ça c'est parce qu'au début je pensais qu'il lisait le plus récent, mais je les ai tous supprimé et il continue de bien les charger!
Non en fait c'est plus idiot que ça, le fichier qui contient les bookmarks, j'arrive pas à le trouvé ::).
J'ai regarder dans le profile utilisateur:
\"User"\Library\Application Support\Firefox\Profiles\
Il y a bien un dossier qui s'appelle bookmarksbackups mais j'ai vérifié en supprimant le contenu, ce n'est pas la dedans que Firefox charge ses bookmarks.
Le seul fichier qui à un impact sur les bookmarks lorsqu'on le supprime c'est:
content-prefs.sqlite
Et l'effet c'est de remettre à zéro les bookmarks.
Ca m'énerve j'ai l'impression que c'est là sous mon nez! C'est forcément un de ces fichiers qu'il faut modifier! :why?:
J'y reviendrais plus tard si j'ai le temps.