ScriptManager combining embedded resources causing issues
So I'm working on reducing the number of requests on an older SF7.1 site and coming up with some issues.
Here's the script manager code:
01.
<asp:ScriptManager ID=
"ScriptManager1"
runat=
"server"
LoadScriptsBeforeUI=
"false"
>
02.
<CompositeScript>
03.
<Scripts>
04.
<asp:ScriptReference Name=
"Telerik.Sitefinity.Resources.Scripts.jquery-1.8.3.min.js"
Assembly=
"Telerik.Sitefinity.Resources"
/>
05.
<asp:ScriptReference Name=
"JawitzCoZa.Web.js.jquery-ui.min.js"
Assembly=
"JawitzCoZa.Web, Version=6.0.4100.0, Culture=neutral, PublicKeyToken=null"
/>
06.
<asp:ScriptReference Name=
"Telerik.Web.UI.Common.Core.js"
Assembly=
"Telerik.Web.UI, Version=2014.3.1209.40, Culture=neutral, PublicKeyToken=121fae78165ba3d4"
/>
07.
<asp:ScriptReference Name=
"Telerik.Web.UI.Common.jQuery.js"
Assembly=
"Telerik.Web.UI, Version=2014.3.1209.40, Culture=neutral, PublicKeyToken=121fae78165ba3d4"
/>
08.
<asp:ScriptReference Name=
"Telerik.Web.UI.Common.jQueryPlugins.js"
Assembly=
"Telerik.Web.UI, Version=2014.3.1209.40, Culture=neutral, PublicKeyToken=121fae78165ba3d4"
/>
09.
<asp:ScriptReference Name=
"Telerik.Web.UI.Common.Scrolling.ScrollingScripts.js"
Assembly=
"Telerik.Web.UI, Version=2014.3.1209.40, Culture=neutral, PublicKeyToken=121fae78165ba3d4"
/>
10.
<asp:ScriptReference Name=
"Telerik.Web.UI.Common.Navigation.OData.OData.js"
Assembly=
"Telerik.Web.UI, Version=2014.3.1209.40, Culture=neutral, PublicKeyToken=121fae78165ba3d4"
/>
11.
<asp:ScriptReference Name=
"Telerik.Web.UI.Common.AnimationFramework.AnimationFramework.js"
Assembly=
"Telerik.Web.UI, Version=2014.3.1209.40, Culture=neutral, PublicKeyToken=121fae78165ba3d4"
/>
12.
<asp:ScriptReference Name=
"Telerik.Web.UI.Common.Navigation.NavigationScripts.js"
Assembly=
"Telerik.Web.UI, Version=2014.3.1209.40, Culture=neutral, PublicKeyToken=121fae78165ba3d4"
/>
13.
<asp:ScriptReference Name=
"Telerik.Web.UI.Common.Navigation.OverlayScript.js"
Assembly=
"Telerik.Web.UI, Version=2014.3.1209.40, Culture=neutral, PublicKeyToken=121fae78165ba3d4"
/>
14.
<asp:ScriptReference Name=
"Telerik.Web.UI.Menu.RadMenuScripts.js"
Assembly=
"Telerik.Web.UI, Version=2014.3.1209.40, Culture=neutral, PublicKeyToken=121fae78165ba3d4"
/>
15.
<asp:ScriptReference Name=
"Telerik.Web.UI.Menu.MenuItem.RadMenuItem.js"
Assembly=
"Telerik.Web.UI, Version=2014.3.1209.40, Culture=neutral, PublicKeyToken=121fae78165ba3d4"
/>
16.
<asp:ScriptReference Name=
"Telerik.Web.UI.Menu.Views.ClassicView.js"
Assembly=
"Telerik.Web.UI, Version=2014.3.1209.40, Culture=neutral, PublicKeyToken=121fae78165ba3d4"
/>
17.
<asp:ScriptReference Name=
"Telerik.Sitefinity.Web.UI.ContentUI.Views.Scripts.ViewBase.js"
Assembly=
"Telerik.Sitefinity, Version=7.3.5610.0, Culture=neutral, PublicKeyToken=b28c218413bdf563"
/>
18.
<asp:ScriptReference Name=
"Telerik.Web.UI.ListView.RadListViewScripts.js"
Assembly=
"Telerik.Web.UI, Version=2014.3.1209.40, Culture=neutral, PublicKeyToken=121fae78165ba3d4"
/>
19.
<asp:ScriptReference Name=
"Telerik.Sitefinity.Web.Scripts.UserPreferences.js"
Assembly=
"Telerik.Sitefinity, Version=7.3.5610.0, Culture=neutral, PublicKeyToken=b28c218413bdf563"
/>
20.
<asp:ScriptReference Name=
"Telerik.Sitefinity.Web.UI.Fields.Scripts.IField.js"
Assembly=
"Telerik.Sitefinity, Version=7.3.5610.0, Culture=neutral, PublicKeyToken=b28c218413bdf563"
/>
21.
<asp:ScriptReference Name=
"Telerik.Sitefinity.Web.UI.Validation.Scripts.Validator.js"
Assembly=
"Telerik.Sitefinity, Version=7.3.5610.0, Culture=neutral, PublicKeyToken=b28c218413bdf563"
/>
22.
<asp:ScriptReference Name=
"Telerik.Sitefinity.Web.UI.Fields.Scripts.FieldControl.js"
Assembly=
"Telerik.Sitefinity, Version=7.3.5610.0, Culture=neutral, PublicKeyToken=b28c218413bdf563"
/>
23.
<asp:ScriptReference Name=
"Telerik.Sitefinity.Web.UI.Fields.Scripts.FieldDisplayMode.js"
Assembly=
"Telerik.Sitefinity, Version=7.3.5610.0, Culture=neutral, PublicKeyToken=b28c218413bdf563"
/>
24.
<asp:ScriptReference Name=
"Telerik.Sitefinity.Resources.Scripts.xregexp-min.js"
Assembly=
"Telerik.Sitefinity.Resources"
/>
25.
<asp:ScriptReference Name=
"Telerik.Sitefinity.Resources.Scripts.xregexp-unicode-base.js"
Assembly=
"Telerik.Sitefinity.Resources"
/>
26.
<asp:ScriptReference Name=
"Telerik.Sitefinity.Web.UI.Fields.Scripts.TextField.js"
Assembly=
"Telerik.Sitefinity, Version=7.3.5610.0, Culture=neutral, PublicKeyToken=b28c218413bdf563"
/>
27.
</Scripts>
28.
</CompositeScript>
29.
<Scripts>
30.
<asp:ScriptReference Name=
"MicrosoftAjax.js"
Assembly=
""
/>
31.
<asp:ScriptReference Name=
"MicrosoftAjaxWebForms.js"
Assembly=
""
/>
32.
</Scripts>
33.
</asp:ScriptManager>
Problem 1:
When I add the references on lines 30 and 31 above to the composite script it fails with the following:
The resource URL cannot be longer than 2048 characters. If using a CompositeScriptReference, reduce the number of ScriptReferences it contains, or combine them into a single static file and set the Path property to the location of it.
Problem 2:
When I moved those two files out of CompositeScripts into Scripts the site worked again but now I'm getting JavaScript errors in the Admin section when I try to edit the Template that I'm making the changes in. See attached screenshot for a list of errors.
I think this might be related to the ordering of the script files? I'm not sure how ScriptManager handles this but I got the list be executing the following code in the Master Page's code behind (which I found on Stack):
public
partial
class
App_Master_Home : MasterPageBase
protected
void
Page_Load(
object
sender, EventArgs e)
protected
override
void
OnInit(EventArgs e)
base
.OnInit(e);
ScriptManager.GetCurrent(
this
.Page)
.ResolveScriptReference +=
new
EventHandler<ScriptReferenceEventArgs>(ResolveScriptReferenceHandler);
List<
string
> ScriptRefs =
new
List<
string
>();
private
void
ResolveScriptReferenceHandler(
object
sender, ScriptReferenceEventArgs e)
ScriptRefs.Add(
"<asp:ScriptReference Name=\""
+ e.Script.Name +
"\" Assembly=\""
+ e.Script.Assembly +
"\" />"
);
protected
override
void
Render(HtmlTextWriter output)
var list = ScriptRefs.Distinct();
foreach
(var item
in
list)
output.Write(output.NewLine);
output.WriteLine(item.ToString());
base
.Render(output);
Problem 3:
I'm getting a great reduction in the number requests (down from 31 to 9), but why does the ScriptManager still output 4 AXD files instead of 1?
Hi Jacques. If you want to solve problem 1, you need to split your resources to different ScriptManagerProxy
Old thread with the same problem www.telerik.com/.../radscriptmanager-which-proxy-should-i-use-quot-the-resource-url-cannot-be-longer-than-1024-characters-quot
If you need example how to use ScriptManagerProxy, let me know.
Thanks Victor.
I'd like to see an example yes, please. Since this is Sitefinity I'm not sure where I would put the proxies or if I just create a dummy user control to do this, but even then, Problem 2 is of a bigger concern since the combining of scripts is causing issues in the back-end.
Victor?
Hi Jacques. Here the example of master file
<
telerik:RadScriptManager
ID
=
"RadScriptManager1"
CompositeScript-ScriptMode
=
"Release"
EnableScriptGlobalization
=
"True"
EnableScriptLocalization
=
"False"
runat
=
"server"
CompositeScript-NotifyScriptLoaded
=
"True"
LoadScriptsBeforeUI
=
"True"
AjaxFrameworkMode
=
"Disabled"
>
<
CompositeScript
>
<
Scripts
>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Resources.Scripts.MicrosoftAjax.js"
Assembly
=
"Telerik.Sitefinity.Resources"
/>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Resources.Scripts.MicrosoftAjaxWebForms.js"
Assembly
=
"Telerik.Sitefinity.Resources"
/>
<
asp:ScriptReference
Name
=
"WebForms.js"
Assembly
=
"System.Web"
/>
<
asp:ScriptReference
Name
=
"Telerik.Web.UI.Common.Core.js"
Assembly
=
"Telerik.Web.UI"
/>
<
asp:ScriptReference
Name
=
"Telerik.Web.UI.ListView.RadListViewScripts.js"
Assembly
=
"Telerik.Web.UI"
/>
<
asp:ScriptReference
Name
=
"Telerik.Web.UI.Common.jQuery.js"
Assembly
=
"Telerik.Web.UI"
/>
</
Scripts
>
</
CompositeScript
>
</
telerik:RadScriptManager
>
<
asp:ScriptManagerProxy
ID
=
"ScriptManagerProxy1"
runat
=
"server"
>
<
CompositeScript
>
<
Scripts
>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Resources.Scripts.xregexp-min.js"
Assembly
=
"Telerik.Sitefinity.Resources"
/>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Resources.Scripts.xregexp-unicode-base.js"
Assembly
=
"Telerik.Sitefinity.Resources"
/>
</
Scripts
>
</
CompositeScript
>
</
asp:ScriptManagerProxy
>
<
asp:ScriptManagerProxy
ID
=
"ScriptManagerProxy2"
runat
=
"server"
>
<
CompositeScript
>
<
Scripts
>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Web.SitefinityJS.Telerik.Sitefinity.js"
Assembly
=
"Telerik.Sitefinity"
/>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Web.SitefinityJS.Utility.Querystring.js"
Assembly
=
"Telerik.Sitefinity"
/>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Web.UI.Fields.Scripts.FormManagerEventArgs.js"
Assembly
=
"Telerik.Sitefinity"
/>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Web.UI.Fields.Scripts.FormManager.js"
Assembly
=
"Telerik.Sitefinity"
/>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Web.UI.Fields.Scripts.IField.js"
Assembly
=
"Telerik.Sitefinity"
/>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Web.UI.Validation.Scripts.Validator.js"
Assembly
=
"Telerik.Sitefinity"
/>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Web.UI.Fields.Scripts.FieldControl.js"
Assembly
=
"Telerik.Sitefinity"
/>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Web.UI.Extenders.Scripts.ExpandableExtender.js"
Assembly
=
"Telerik.Sitefinity"
/>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Web.UI.Fields.Scripts.TextField.js"
Assembly
=
"Telerik.Sitefinity"
/>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Web.UI.Fields.Scripts.FieldDisplayMode.js"
Assembly
=
"Telerik.Sitefinity"
/>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Modules.Forms.Web.UI.Scripts.FormTextBox.js"
Assembly
=
"Telerik.Sitefinity"
/>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Web.UI.Fields.Scripts.Choice.js"
Assembly
=
"Telerik.Sitefinity"
/>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Web.UI.Fields.Scripts.RenderChoicesAs.js"
Assembly
=
"Telerik.Sitefinity"
/>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Web.UI.Fields.Scripts.ChoiceField.js"
Assembly
=
"Telerik.Sitefinity"
/>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Modules.Forms.Web.UI.Scripts.FormCheckboxes.js"
Assembly
=
"Telerik.Sitefinity"
/>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Modules.Forms.Web.UI.Scripts.FormDropDownList.js"
Assembly
=
"Telerik.Sitefinity"
/>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Modules.Forms.Web.UI.Scripts.FormParagraphTextBox.js"
Assembly
=
"Telerik.Sitefinity"
/>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Web.UI.ContentUI.Views.Scripts.ViewBase.js"
Assembly
=
"Telerik.Sitefinity"
/>
<
asp:ScriptReference
Name
=
"Telerik.Sitefinity.Web.Scripts.UserPreferences.js"
Assembly
=
"Telerik.Sitefinity"
/>
</
Scripts
>
</
CompositeScript
>
</
asp:ScriptManagerProxy
>
Hi Victor,
Can you provide a bit of a description of what and why you're doing this?
I.e. I see you've used a Telerik RadScriptManager and then added two Proxies presumably on the same Master Page.
Whilst I wait for clarity from you, I've gone the route of dynamically adding script references to the ScriptManager but only if the page is not in DesignMode, which helped resolve the backend issues.
1) I ordered it in ranodm way. It's tested and working for me and my project , but i can't give 100% that it safe in any cases
2) I splitted all scripts for two proxies, because they have restriction (if you will try to use one, it will raise error: The resource URL cannot be longer than 2048 characters)
3) All backend features is working fine for me
Thanks Victor, I've followed a similar route but did some of it programatically because it was definitely giving me issues in the back end.