Обнаружение изменений значений JavaScript из C / Obj-C в JavaScriptCore

#javascript #objective-c #cocoa #javascriptcore

#javascript #objective-c #какао #javascriptcore

Вопрос:

Существует ли единый способ обнаружения изменений состояния виртуальной машины в JavaScriptCore из хост-программы? В настоящее время я использую новый Obj-C API, но я не против переключиться на стандартные API WebKit, если это даст мне то, что я хочу.

В идеале я мог бы сделать что-то вроде этого:

 JSContext *ctx = [JSContext new];
[ctx registerMythicalChangeWatcher:aBlockOrDelegate];
[ctx evaluateScript:@"var deez = 'nuuuts'"]; // aBlockOrDelegate is informed of changed to "deez"
  

В настоящее время лучшее, что я могу придумать, это в основном обходить глобальный объект после каждого eval, что, как вы можете себе представить… неоптимально 🙂

Интерфейс Obj-C не имеет ссылки на класс, которую я могу найти, поэтому я полагался на просмотр заголовков, и это кажется довольно ограниченным, поэтому я полагаю, что если это можно сделать, мне нужно будет перейти в API WebKit C. К сожалению, мой google-fu привел меня в круги или к документации по V8 или тому, что они называют JS-движком Mozilla на этой неделе.

Любая помощь будет высоко оценена!

Комментарии:

1. Как бы вы это сделали в чистом JS?

2. В принципе, вы не можете, во всяком случае, с уверенностью. Но это похоже на то, что должно быть выполнимо из хост-приложения.