internal static ScriptRequestProcessor Create(HtmlScriptElement script) { var document = script.Owner; var loader = document.Loader; return(new ScriptRequestProcessor(script, loader)); }
public ScriptRequestProcessor(IBrowsingContext context, HtmlScriptElement script) { _context = context; _document = script.Owner; _script = script; _loader = context.GetService <IResourceLoader>() !; }
public override IHtmlElement Create(HtmlAttributesCollection attributes, string html, int startContentIndex, int endContentIndex, IHtmlParserManager htmlParserManager) { HtmlScriptElement element = new HtmlScriptElement(); element.Attributes = attributes; element.Text(html.SubStringToIndex(startContentIndex, endContentIndex - 1), true); return(element); }
private void RaiseBeforeScriptExecute(HtmlScriptElement script) { BeforeScriptExecute?.Invoke(script); var evt = script.OwnerDocument.CreateEvent("Event"); evt.InitEvent("BeforeScriptExecute", true, false); script.DispatchEvent(evt); }
private void RaiseScriptExecutionError(HtmlScriptElement script, Exception ex) { ScriptExecutionError?.Invoke(script, ex); var evt = (ErrorEvent)script.OwnerDocument.CreateEvent("ErrorEvent"); evt.ErrorEventInit(ex.Message, script.Src ?? "...", 0, 0, ex); evt.Target = script; script.OwnerDocument.DispatchEvent(evt); }
//todo: revise it. it shouldn't be here. internal static async Task <string> LoadAsync(HtmlScriptElement script, Func <string, Task <IResource> > getResourceAsyncFn) { if (string.IsNullOrEmpty(script.Src)) { throw new InvalidOperationException("Src not set."); } var resource = await getResourceAsyncFn(script.Src); try { using (var reader = new StreamReader(resource.Stream)) return(reader.ReadToEnd()); } catch { lock (script.OwnerDocument) { script.RaiseEvent("error", false, false); } } return(null); }
internal void AddScript(HtmlScriptElement script) { _loadingScripts.Enqueue(script); }
private static bool IsExternalScript(HtmlScriptElement script) => !string.IsNullOrEmpty(script.Src);
public ScriptInfo(HtmlScriptElement node, string code) { Node = node; Code = code; }
private ScriptRequestProcessor(HtmlScriptElement script, IResourceLoader loader) { _script = script; _document = script.Owner; _loader = loader; }
private bool TryExecuteScript(HtmlScriptElement script) { throw new NotImplementedException(); }
void HandleScript(HtmlScriptElement script) { bool haveSrc = _attributes.Find((a) => { return a.name == "src"; }) != null; bool haveDefer = _attributes.Find((a) => { return a.name == "defer"; }) != null; bool haveAsync = _attributes.Find((a) => { return a.name == "async"; }) == null; if (haveSrc && haveDefer && !haveAsync) { _finishParsingScr.Add(new HtmlScriptElement()); //BLANK } else if (haveSrc && !haveAsync) { _pendingScr.Add(new HtmlScriptElement()); //BLANK } else if (!haveSrc) { if (!TryExecuteScript()) { _pendingScr.Add(new HtmlScriptElement()); } } else if (haveSrc && !haveAsync) { if (!TryExecuteScript()) { _pendingScr.Add(new HtmlScriptElement()); } } else if (haveSrc) { if (!TryExecuteScript()) { _pendingScr.Add(new HtmlScriptElement()); } } else { //The user agent must immediately execute the script block, even if other scripts are already executing. //нужно ли добавлять в лист скриптов если не возникла ошибка исполнения if (!TryExecuteScript()) { _pendingScr.Add(new HtmlScriptElement()); } } //в любом случае нужно добавить скрипт или в лист скриптов после загрузки документа для исполнения или добавить элемент в список скриптов к документу }