// Copyright © 2018 The CefSharp Authors. All rights reserved. // // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. using System; using CefSharp.Event; namespace CefSharp { /// /// Javascript object repository, object are registered for binding /// One repository per ChromiumWebBrowser instance /// public interface IJavascriptObjectRepository : IDisposable { /// /// Register an object for binding in Javascript. You can either /// register an object in advance or as part of the /// event that will be called if no object matching object is found in the registry. /// Objects binding is now initiated in Javascript through the CefSharp.BindObjectAsync /// function (returns a Promise). /// For more detailed examples see https://github.com/cefsharp/CefSharp/issues/2246 /// The equivilient to RegisterJsObject is isAsync = false /// The equivilient RegisterAsyncJsObject is isAsync = true /// /// object name /// the object that will be bound in javascript /// /// if true the object will be registered for async communication, /// only methods will be exposed and when called from javascript will return a Promise to be awaited. /// This method is newer and recommended for everyone starting out as it is faster and more reliable. /// If false then methods and properties will be registered, this method relies on a WCF service to communicate. /// If you are targeting .Net Core then you can only use isAsync = true as Microsoft has chosen not to support WCF. /// /// binding options, by default method/property names are camelCased, you can control this /// and other advanced options though this class. void Register(string name, object objectToBind, bool isAsync, BindingOptions options = null); /// /// UnRegister all the currently bound objects from the repository. If you unregister an object that is currently /// bound in JavaScript then the method/property calls will fail. /// void UnRegisterAll(); /// /// UnRegister a bound object from the repository. If you unregister an object that is currently /// bound in JavaScript then the method/property calls will fail. /// /// object name /// returns true if the object was successfully unbound otherwise false. bool UnRegister(string name); /// /// Has bound objects /// bool HasBoundObjects { get; } /// /// Is object bound /// /// name /// true if object with matching name bound bool IsBound(string name); /// /// Event handler is called when an object with a given name is requested for binding and is not yet /// registered with the repository. Use /// to register objects (using /// event EventHandler ResolveObject; /// /// Event handler is triggered when a object has been successfully bound in javascript /// event EventHandler ObjectBoundInJavascript; /// /// Event handler is triggered when multiple objects has been successfully bound in javascript, this event only /// contains the names of objects successfully bound. /// event EventHandler ObjectsBoundInJavascript; } }