Esempio n. 1
0
        internal static ScriptRequestProcessor Create(HtmlScriptElement script)
        {
            var document = script.Owner;
            var loader   = document.Loader;

            return(new ScriptRequestProcessor(script, loader));
        }
Esempio n. 2
0
 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);
        }
Esempio n. 4
0
        private void RaiseBeforeScriptExecute(HtmlScriptElement script)
        {
            BeforeScriptExecute?.Invoke(script);

            var evt = script.OwnerDocument.CreateEvent("Event");

            evt.InitEvent("BeforeScriptExecute", true, false);
            script.DispatchEvent(evt);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        //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);
        }
Esempio n. 7
0
 internal void AddScript(HtmlScriptElement script)
 {
     _loadingScripts.Enqueue(script);
 }
Esempio n. 8
0
 private static bool IsExternalScript(HtmlScriptElement script) => !string.IsNullOrEmpty(script.Src);
Esempio n. 9
0
 public ScriptInfo(HtmlScriptElement node, string code)
 {
     Node = node;
     Code = code;
 }
Esempio n. 10
0
 private ScriptRequestProcessor(HtmlScriptElement script, IResourceLoader loader)
 {
     _script   = script;
     _document = script.Owner;
     _loader   = loader;
 }
Esempio n. 11
0
 private bool TryExecuteScript(HtmlScriptElement script)
 {
     throw new NotImplementedException();
 }
Esempio n. 12
0
        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());
                }
            }
            //в любом случае нужно добавить скрипт или в лист скриптов после загрузки документа для исполнения или добавить элемент в список скриптов к документу
        }