Beispiel #1
0
        private void HandleJavascriptContextCreated(CefFrame frame)
        {
            if (isDisposing)
            {
                return;
            }

            ExecuteWithAsyncErrorHandling(() => {
                if (UrlHelper.IsChromeInternalUrl(frame.Url))
                {
                    return;
                }

                lock (JsExecutors) {
                    if (isDisposing)
                    {
                        return;
                    }

                    var frameName = frame.Name;

                    if (this.IsMainFrame(frameName))
                    {
                        // when a new main frame in created, dispose all running executors -> since they should not be valid anymore
                        // all child iframes were gone
                        DisposeJavascriptExecutors(JsExecutors.Where(je => !je.Value.IsValid).Select(je => je.Key).ToArray());
                    }

                    var jsExecutor = GetJavascriptExecutor(frameName);
                    jsExecutor?.StartFlush(frame);

                    JavascriptContextCreated?.Invoke(frameName);
                }
            });
        }
Beispiel #2
0
 private void DisposeJavascriptExecutors(string[] executorsKeys)
 {
     foreach (var executorKey in executorsKeys)
     {
         var indexedExecutorKey = executorKey ?? "";
         if (JsExecutors.TryGetValue(indexedExecutorKey, out var executor))
         {
             executor.Dispose();
             JsExecutors.Remove(indexedExecutorKey);
         }
     }
 }
Beispiel #3
0
        private JavascriptExecutor GetJavascriptExecutor(string frameName)
        {
            if (isDisposing)
            {
                return(null);
            }

            lock (JsExecutors) {
                if (isDisposing)
                {
                    return(null);
                }

                var frameNameForIndex = frameName ?? "";
                if (!JsExecutors.TryGetValue(frameNameForIndex, out var jsExecutor))
                {
                    jsExecutor = new JavascriptExecutor(this, this.GetFrame(frameName));
                    JsExecutors.Add(frameNameForIndex, jsExecutor);
                }
                return(jsExecutor);
            }
        }