public bool UnbindBrowserAPI(IBrowserAPI api) { var removed = _availableAPIs.RemoveAll(e => e.APIName.Equals(api.APIName) && e == api); if (removed == 0) { return(false); } if (!CefBrowser.JavascriptObjectRepository.IsBound(api.APIName)) { return(false); } var script = $@"(async ()=>{{ return await CefSharp.DeleteBoundObject('{ api.APIName}') }})();"; if (this.CefBrowser.CanExecuteJavascriptInMainFrame) { var promise = this.GetMainFrame().EvaluateScriptAsync(script, "Gobchat"); if (promise.Status == System.Threading.Tasks.TaskStatus.WaitingForActivation) { promise.Wait(TimeSpan.FromSeconds(5)); if (promise.Status != System.Threading.Tasks.TaskStatus.WaitingForActivation) { promise.GetAwaiter().GetResult(); } } else { promise.GetAwaiter().GetResult(); } } return(CefBrowser.JavascriptObjectRepository.UnRegister(api.APIName)); }
public bool BindBrowserAPI(IBrowserAPI api, bool isApiAsync) { foreach (var boundAPI in _availableAPIs) { if (boundAPI.APIName.Equals(api.APIName)) { return(false); } } _availableAPIs.Add(api); CefBrowser.JavascriptObjectRepository.Register(api.APIName, api, isAsync: isApiAsync, options: CefSharp.BindingOptions.DefaultBinder); if (this.CefBrowser.IsBrowserInitialized && this.GetMainFrame() != null) { AwaitAPIBinding(api); } return(true); }