Пример #1
0
        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));
        }
Пример #2
0
        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);
        }