diff --git a/src/HydroClientActions.cs b/src/HydroClientActions.cs index 6ca00ba..e3d99ba 100644 --- a/src/HydroClientActions.cs +++ b/src/HydroClientActions.cs @@ -1,3 +1,5 @@ +using JetBrains.Annotations; + namespace Hydro; /// @@ -14,14 +16,14 @@ internal HydroClientActions(HydroComponent hydroComponent) => /// Execute JavaScript expression on client side /// /// JavaScript expression - public void ExecuteJs(string jsExpression) => + public void ExecuteJs([LanguageInjection(InjectedLanguage.JAVASCRIPT)] string jsExpression) => _hydroComponent.AddClientScript(jsExpression); - + /// /// Invoke JavaScript expression on client side /// /// JavaScript expression [Obsolete("Use ExecuteJs instead.")] - public void Invoke(string jsExpression) => + public void Invoke([LanguageInjection(InjectedLanguage.JAVASCRIPT)] string jsExpression) => ExecuteJs(jsExpression); } \ No newline at end of file diff --git a/src/HydroComponent.cs b/src/HydroComponent.cs index 0abf26c..a144d7d 100644 --- a/src/HydroComponent.cs +++ b/src/HydroComponent.cs @@ -660,7 +660,7 @@ private HtmlNode GetClientScript(HtmlDocument document, string script) var scriptNode = document.CreateElement("script"); scriptNode.SetAttributeValue("hydro-js", "true"); scriptNode.SetAttributeValue("hydro-id", _componentId); - scriptNode.SetAttributeValue("type", "text/hydro"); + scriptNode.SetAttributeValue("type", "text/javascript"); scriptNode.InnerHtml = $"Hydro.executeComponentJs('{_componentId}', function() {{ {script} }});"; return scriptNode; } diff --git a/src/Scripts/hydro.js b/src/Scripts/hydro.js index 7ebdc20..5bd775d 100644 --- a/src/Scripts/hydro.js +++ b/src/Scripts/hydro.js @@ -40,7 +40,7 @@ } function enablePlainScripts(element) { - enableScripts(element, 'script[type="text/javascript"]:not([hydro-loaded])'); + enableScripts(element, 'script[type="text/javascript"]:not([hydro-loaded]):not([hydro-js])'); } function enableHydroScripts(componentElement) { @@ -48,7 +48,13 @@ } function executeComponentJs(componentId, func) { - func.call(document.getElementById(componentId)); + const callback = () => func.call(document.getElementById(componentId)) + + if (document.readyState === "complete") { + setTimeout(callback); + } else { + document.addEventListener("DOMContentLoaded", callback); + } } async function loadPageContent(url, push, condition, payload) {