Доступ к методам и свойствам произвольного объекта Objective-C из JavaScript

1

Я хочу получить доступ к свойствам и методам вызова объекта Objective-C, который был возвращен хосту JavaScript как свойство открытого объекта ([windowScriptObject setValue:self forKey:@"a"]):

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

В Javascript я хочу иметь возможность сделать следующее:

// 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 ]
Теги:
webkit

1 ответ

1

MyObject необходимо реализовать +isSelectorExcludedFromWebScript: и/или +isKeyExcludedFromWebScript:. По умолчанию Javascript не имеет доступа к Objective-C методам; вы должны явно разрешить это.

Вы видите какой-то другой симптом за этим?

Для получения дополнительной информации см. Использование Objective-C От Javascript.

  • 0
    Я прочитал все это. using -valueForUndefinedKey :, setValue: forUndefinedKey :, -invokeUndefinedMethodFromWebScript: withArguments: можно отправлять произвольные операции получения, установки и вызова методов из JavaScript в объект Objective-C, как показано в Using Objective-C From Javascript . Я хочу пойти дальше и вернуть (сделать доступным через abc ) другой объект Objective-C на хост JavaScript.
  • 0
    Затем вам все равно нужно будет убедиться, что MyObject разрешает доступ к Javascript (для чего + isSelectorExcludedFromWebScript:). Кроме того, этот Javascript является локальным по отношению к компьютеру или из сети? Предоставление удаленному Javascript неограниченного доступа к процессу Какао делает продукт очень трудным для защиты и позволяет злоумышленнику запускать произвольный код в качестве пользователя со спуфингом DNS (или множеством других распространенных атак). Это не проблема, если Javascript хранится в вашем собственном пакете (как в случае с Jandascript-мостом Pandoraboy).
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню