2009-09-03 3 views
1

Je veux accéder aux propriétés et méthodes d'appel d'un objet Objective-C qui a été retourné à l'hôte JavaScript comme propriété d'objet exposé ([windowScriptObject setValue:self forKey:@"a"]):Méthodes d'accès et les propriétés d'objet Objective-C arbitraire de JavaScript

- (id) valueForUndefinedKey:(NSString*) key { 
    if ([key isEqualToString:@"b"]) { 
    MyObject* obj = [ [ MyObject alloc ] init ]; 
    return obj; 
    } 
    return Nil; 
} 

Dans Javascript Je veux être en mesure de faire ce qui suit:

// a is already exposed Objective-C object 
var b = a.b; // reference to myObject 
var c = a.b.c; // myObject.c 
var d = a.b.d(); // [ myObject d ] 

Répondre

1

MyObject doit mettre en œuvre +isSelectorExcludedFromWebScript: et/ou +isKeyExcludedFromWebScript:. Par défaut, Javascript n'est pas autorisé à accéder aux méthodes Objective-C; vous devez l'autoriser explicitement.

Voyez-vous un autre symptôme au-delà de cela?

Pour plus d'informations, voir Using Objective-C From Javascript.

+0

J'ai lu tout ça. en utilisant -valueForUndefinedKey:, setValue: forUndefinedKey :, -invokeUndefinedMethodFromWebScript: withArguments: on peut envoyer arbitrairement des get, sets et des appels de méthodes de JavaScript à l'objet Objective-C, comme indiqué dans 'Using Objective-C From Javascript'. Je veux aller plus loin et rendre (rendre accessible via 'a.b.c') un autre objet Objective-C à l'hôte JavaScript. –

+0

Vous devrez alors toujours vous assurer que MyObject autorise l'accès Javascript (ce qui est ce que + isSelectorExcludedFromWebScript: est pour). Aussi, est ce Javascript local à la machine, ou venant du réseau? Accorder un accès illimité Javascript au processus Cocoa rend le produit très difficile à sécuriser, et permettrait à un attaquant d'exécuter du code arbitraire en tant qu'utilisateur avec spoofing DNS (ou toute une série d'autres attaques courantes). Ce n'est pas un problème si le Javascript est stocké dans votre propre paquet (comme dans le cas du pont Javascript de Pandoraboy). –

+0

'-isSelectorExcludedFromWebScript:' et '-isKeyExcludedFromWebScript:' renvoie NON. JavaScript est local, je veux construire un pont plus flexible entre JS et le code de l'application principale. –

Questions connexes