Getting the JS Context for a View

Most calls in JavaScriptCore requires an execution context. You can get the global JS context for the current page via View::LockJSContext().

///
/// Use LoadListener::OnDOMReady to wait for the DOM to load.
///
void MyApp::OnDOMReady(View* caller,
                       uint64_t frame_id,
                       bool is_main_frame,
                       const String& url) {
  ///
  /// Acquire the JS execution context for the current page.
  ///
  auto scoped_context = caller->LockJSContext();
  
  ///
  /// Typecast to the underlying JSContextRef.
  ///
  JSContextRef ctx = (*scoped_context);

  /// Make calls to JavaScriptCore API here...
}

JS Context Lifetime

Just note that this context may change between page loads-- when the context changes all garbage-collected objects (JSValueRef and JSObjectRef) are no longer valid.