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) {