diff --git a/Oqtane.Client/Resources/Modules/Admin/Pages/Add.resx b/Oqtane.Client/Resources/Modules/Admin/Pages/Add.resx
index 85b92768..b3345f93 100644
--- a/Oqtane.Client/Resources/Modules/Admin/Pages/Add.resx
+++ b/Oqtane.Client/Resources/Modules/Admin/Pages/Add.resx
@@ -229,7 +229,7 @@
Appearance
- Optionally enter content to be included in the page head (ie. meta and link tags are valid, script tags are not).
+ Optionally enter content to be included in the page head (ie. meta, link, or script tags). Please note that inline script must include an id attribute.Head Content:
diff --git a/Oqtane.Client/Resources/Modules/Admin/Pages/Edit.resx b/Oqtane.Client/Resources/Modules/Admin/Pages/Edit.resx
index 184b4af4..3b1cedd4 100644
--- a/Oqtane.Client/Resources/Modules/Admin/Pages/Edit.resx
+++ b/Oqtane.Client/Resources/Modules/Admin/Pages/Edit.resx
@@ -265,7 +265,7 @@
Clickable?
- Optionally enter content to be included in the page head (ie. meta and link tags are valid, script tags are not).
+ Optionally enter content to be included in the page head (ie. meta, link, or script tags). Please note that inline script must include an id attribute.Head Content:
diff --git a/Oqtane.Client/Resources/Modules/Admin/Site/Index.resx b/Oqtane.Client/Resources/Modules/Admin/Site/Index.resx
index 5b5df55c..cbd72422 100644
--- a/Oqtane.Client/Resources/Modules/Admin/Site/Index.resx
+++ b/Oqtane.Client/Resources/Modules/Admin/Site/Index.resx
@@ -355,7 +355,7 @@
Appearance
- Optionally enter content to be included in the page head (ie. meta and link tags are valid, script tags are not).
+ Optionally enter content to be included in the page head (ie. meta, link, or script tags). Please note that inline script must include an id attribute.Head Content:
diff --git a/Oqtane.Client/UI/ThemeBuilder.razor b/Oqtane.Client/UI/ThemeBuilder.razor
index 69625df5..3c7bfe7b 100644
--- a/Oqtane.Client/UI/ThemeBuilder.razor
+++ b/Oqtane.Client/UI/ThemeBuilder.razor
@@ -1,5 +1,5 @@
@namespace Oqtane.UI
-@inject IJSRuntime JsRuntime
+@inject IJSRuntime JSRuntime
@inject NavigationManager NavigationManager
@inject SiteState SiteState
@@ -41,11 +41,11 @@
// head content
if (!string.IsNullOrEmpty(PageState.Site.HeadContent))
{
- headcontent += PageState.Site.HeadContent + "\n";
+ headcontent += RemoveScripts(PageState.Site.HeadContent) + "\n";
}
if (!string.IsNullOrEmpty(PageState.Page.HeadContent))
{
- headcontent += PageState.Page.HeadContent + "\n";
+ headcontent += RemoveScripts(PageState.Page.HeadContent) + "\n";
}
// stylesheets
foreach (Resource resource in PageState.Page.Resources.Where(item => item.ResourceType == ResourceType.Stylesheet))
@@ -79,6 +79,78 @@
};
}
+ protected override async Task OnAfterRenderAsync(bool firstRender)
+ {
+ if (!firstRender)
+ {
+ if (PageState.Page.HeadContent != null && PageState.Page.HeadContent.Contains("", index) + 9 - index);
+ var attributes = script.Substring(0, script.IndexOf(">")).Replace("\"", "").Split(" ");
+ string id = "";
+ string url = "";
+ string integrity = "";
+ string crossorigin = "";
+ bool es6module = false;
+ foreach (var attribute in attributes)
+ {
+ if (attribute.Contains("="))
+ {
+ var value = attribute.Split("=");
+ switch (value[0])
+ {
+ case "id":
+ id = value[1];
+ break;
+ case "src":
+ url = value[1];
+ break;
+ case "integrity":
+ integrity = value[1];
+ break;
+ case "crossorigin":
+ crossorigin = value[1];
+ break;
+ case "type":
+ es6module = (value[1] == "module");
+ break;
+ }
+ }
+ }
+ if (!string.IsNullOrEmpty(url))
+ {
+ url = (url.Contains("://")) ? url : PageState.Alias.BaseUrl + url;
+ await interop.IncludeScript(id, url, integrity, crossorigin, "", "head");
+ }
+ else
+ {
+ index = script.IndexOf(">") + 1;
+ await interop.IncludeScript(id, "", "", "", script.Substring(index, script.IndexOf("") - index), "head");
+ }
+ index = PageState.Page.HeadContent.IndexOf("") + 9 - index);
+ index = headcontent.IndexOf("", index) + 9 - index) + Environment.NewLine;
+ index = headcontent.IndexOf("