2011-09-07 5 views
0

Ceci est mon script d'origine. Il retournera l'adresse actuelle de SafariComment vérifier si l'application est en cours d'exécution en utilisant [[NSAppleScript alloc] initWithSource:

NSAppleScript *scriptURL= [[NSAppleScript alloc] initWithSource:@"tell application \"Safari\" to return URL of front document as string"]; 

si je veux vérifier si le navigateur Safari est ouvert ou non avant de demander le script pour renvoyer l'URL?

Voici comment je fais dans l'éditeur AppleScript .. Donc, ce script vérifie si le Safari est en cours d'exécution ou non .. Cela fonctionne dans l'éditeur AppleScript

tell application "Safari" 
     if it is running then 

      //return url code here 
     end if 
    end tell 

Ce que je dois est maintenant appelé tout de suite la script à partir de mon application de cacao en utilisant '[[NSAppleScript alloc] initWithSource:'

J'ai essayé cela, mais sa ne fonctionne pas

NSAppleScript *scriptURL= [[NSAppleScript alloc] initWithSource:@"tell application \"Safari\" if it is running to return URL of front document as string"]; 
+2

Avez-vous regardé 'NSRunningApplication'? Cela vous donnera l'information que vous voulez sans avoir recours à AppleScript. –

Répondre

4

Pourquoi ce travail? C'est une mauvaise grammaire AppleScript.

Il existe des moyens de le faire sans recourir à AppleScript, mais ça va faire pour l'instant. Vous pouvez avoir plusieurs lignes dans un script intégré en utilisant la séquence d'échappement C \n pour insérer une nouvelle ligne:

NSString *source = @"tell application \"Safari\"\nif it is running then\nreturn URL of front document as string\nend if\nend tell"; 

Vous pouvez également briser une chaîne constante en plaçant un après l'autre, ce qui le rend plus facile à lire:

NSString *source = 
    @"tell application \"Safari\"\n" 
     "if it is running then\n" 
      "return URL of front document as string\n" 
     "end if\n" 
    "end tell"; 

Le compilateur C va coller ces constantes de chaîne ensemble dans un seul objet NSString.

1

Le code AppleScript de l'OP est incorrect. Le texte AppleScript cela devrait fonctionner:

NSAppleScript *scriptURL= [[NSAppleScript alloc] initWithSource:@"tell application \"Safari\" to if it is running then return URL of front document as string"]; 
0

Comme dougscripts (+1) a souligné, mais je voulais le rendre peu plus claire des raisons pour lesquelles la syntaxe AppleScript d'une doublure dans le NSAppleScript l'OP a essayé n'a pas fonctionné.

Et pour être honnête, j'ai suggéré une modification qui a perdu trois à deux

code NSAppleScript du OP:

NSAppleScript *scriptURL= [[NSAppleScript alloc] initWithSource:@"tell application \"Safari\" if it is running to return URL of front document as string"]; 

n'a pas fonctionné parce que la syntaxe est erronée.

La syntaxe correcte devrait être:

NSAppleScript *scriptURL= [[NSAppleScript alloc] initWithSource:@"tell application \"Safari\" to if it is running then return URL of front document as string"]; 

Il y a deux changements dans une partie du code en gras ci-dessous.

\ "Safari \" à si elle est en cours d'exécution puis retour URL

Questions connexes