3
votes

Pretty simple, I need to insert a script in Sitecores (v. 6.4) backend - how do I do it?

It doesn't matter if the script is placed inside <head> or <body>, nor does it matter if I can only specify the src of a <script> tag or if I can insert an actual Javascript snippet (the latter is preferable though).

The script needs to be inserted in the HTML when a Content Editor window is opened.

It is not an installation of my own, nor do I develop anything for Sitecore (I do have admin access, however), so something along the lines of installing a plugin would be the best solution I reckon.

I've previously inserted the script in Sitecore 5.4, but not in a pretty way (editing XML files) and if a better solution could be found here too, that'd be pretty great.

Update using Jens Mikkelsens answer in Sitecore Xpress 6:

I tried placing the following in web.config:

<clientscripts>
  <everypage>
    <script src="/test.js" language="javascript" />
  </everypage>
  <htmleditor>
    <script src="/test.js" language="javascript" />
  </htmleditor>
</clientscripts>

Being a little bit overzealous (and wanting to make sure the test.js file can be found) I put a js.test in the following locations:

  • inetpub\wwwroot\SitecoreWebsite\WebSite\sitecore\shell\Applications\Content Manager\
  • inetpub\wwwroot\SitecoreWebsite\WebSite\sitecore\shell\Applications\
  • inetpub\wwwroot\SitecoreWebsite\WebSite\sitecore\shell\
  • inetpub\wwwroot\SitecoreWebsite\WebSite\sitecore\
  • inetpub\wwwroot\SitecoreWebsite\WebSite\

Content of the test.js:

alert("Test [PATH TOKEN]");

Where the path token is just the parent folder name, so I know which test.js was loaded, e.g. inetpub\wwwroot\SitecoreWebsite\WebSite\sitecore\shell\Applications\Content Manager\test.js holds:

alert("Test Content Manager");

When I try to log in using the default Xpress admin user one of three things happens (in all three cases the frontend loads without errors, but no script present. I have NOT been able to determine when the errors happen, the only thing I can say for sure is that no errors occur when the test.js has not been included in web.config):

Case 1:

The content editor loads as expected, but no script is loaded. This happens most of the time when the clientscript have been included.

Case 2 - Server Error:

Server Error in '/' Application.

Exception Details: System.ArgumentException: Empty strings are not allowed.
Parameter name: value

Stack Trace: 

[ArgumentException: Empty strings are not allowed.
Parameter name: value]
   Sitecore.Diagnostics.Assert.ArgumentNotNullOrEmpty(String argument, String argumentName) +241
   Sitecore.Web.UI.HtmlControls.PageScriptManager.GetEveryPageScripts() +410
   Sitecore.Web.UI.HtmlControls.PageScriptManager.GetScripts() +702
   Sitecore.Web.UI.HtmlControls.Page.OnInit(EventArgs e) +62
   System.Web.UI.Control.InitRecursive(Control namingContainer) +143
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1477

Case 3 - Sitecore error:

A required license is missing
Most likely causes:
The resource you are trying to access requires the following license: Runtime.

I'm not sure whether or not Xpress simply doesn't support clientscripts, but even if it doesn't it is weird that some times the content editor loads.

Update after testing in Sitecore 5.4 full version:

It does indeed work to put a script tag inside the <clientscripts> section in web.config as Jens Mikkelsen answered. It is, however, neccessary to put it inside the subsection <everypage> to get it to appear on every single page in the backend, whereas <htmleditor> only works for the Telerik RadEditor popup window in Sitecore 5.4.

Update after testing in Sitecore 6 full version:

The same method as described for Sitecore 5.4 works for Sitecore 6 with the addition of little thing: <script> embedded in <clienscripts> now require a key attribute:

<clientscripts>
  <everypage>
    <script src="/test.js" language="javascript" key="test script" />
  </everypage>
</clientscripts>
3

3 Answers

4
votes

I don't think you will be able to add the script with out modifying a file. However you can take a look at the <clientscripts> section in the web.config. There you can add scripts to be loaded. However I don't know if it will only load in the content editor.

I have experimented with this before, and I ended up using the above setting, but as I remember it also loaded on the Page Editor and the Desktop.

1
votes

Perhaps you can use this example code to add controls to the <head> on the front-end but instead alter it to use the <renderContentEditor> pipeline to somehow inject a new <script> tag into the editor.