Skip to content

Commit 1b04c21

Browse files
authored
Merge pull request #85 from hydrostack/84-executejs-scripts-wont-load-on-page-load
Make sure that ExecuteJs scripts are loaded as text/javascript
2 parents da3b7da + a3b4400 commit 1b04c21

File tree

3 files changed

+14
-6
lines changed

3 files changed

+14
-6
lines changed

src/HydroClientActions.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
using JetBrains.Annotations;
2+
13
namespace Hydro;
24

35
/// <summary>
@@ -14,14 +16,14 @@ internal HydroClientActions(HydroComponent hydroComponent) =>
1416
/// Execute JavaScript expression on client side
1517
/// </summary>
1618
/// <param name="jsExpression">JavaScript expression</param>
17-
public void ExecuteJs(string jsExpression) =>
19+
public void ExecuteJs([LanguageInjection(InjectedLanguage.JAVASCRIPT)] string jsExpression) =>
1820
_hydroComponent.AddClientScript(jsExpression);
19-
21+
2022
/// <summary>
2123
/// Invoke JavaScript expression on client side
2224
/// </summary>
2325
/// <param name="jsExpression">JavaScript expression</param>
2426
[Obsolete("Use ExecuteJs instead.")]
25-
public void Invoke(string jsExpression) =>
27+
public void Invoke([LanguageInjection(InjectedLanguage.JAVASCRIPT)] string jsExpression) =>
2628
ExecuteJs(jsExpression);
2729
}

src/HydroComponent.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,7 @@ private HtmlNode GetClientScript(HtmlDocument document, string script)
660660
var scriptNode = document.CreateElement("script");
661661
scriptNode.SetAttributeValue("hydro-js", "true");
662662
scriptNode.SetAttributeValue("hydro-id", _componentId);
663-
scriptNode.SetAttributeValue("type", "text/hydro");
663+
scriptNode.SetAttributeValue("type", "text/javascript");
664664
scriptNode.InnerHtml = $"Hydro.executeComponentJs('{_componentId}', function() {{ {script} }});";
665665
return scriptNode;
666666
}

src/Scripts/hydro.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,21 @@
4040
}
4141

4242
function enablePlainScripts(element) {
43-
enableScripts(element, 'script[type="text/javascript"]:not([hydro-loaded])');
43+
enableScripts(element, 'script[type="text/javascript"]:not([hydro-loaded]):not([hydro-js])');
4444
}
4545

4646
function enableHydroScripts(componentElement) {
4747
enableScripts(componentElement, `script[hydro-js][hydro-id="${componentElement.id}"]:not([hydro-loaded])`);
4848
}
4949

5050
function executeComponentJs(componentId, func) {
51-
func.call(document.getElementById(componentId));
51+
const callback = () => func.call(document.getElementById(componentId))
52+
53+
if (document.readyState === "complete") {
54+
setTimeout(callback);
55+
} else {
56+
document.addEventListener("DOMContentLoaded", callback);
57+
}
5258
}
5359

5460
async function loadPageContent(url, push, condition, payload) {

0 commit comments

Comments
 (0)