Dynamic Browser Window Title - Take 2
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-15-2014 07:07 PM
I just wanted to add some functionality to the custom window title script I wrote about in this blog post - Dynamic Browser Window Title. I cannot edit the post so I'll add a new one here.
dmolnar101 added some code for the First and Last names on the User form and then asked about displaying the Knowledge base article's name. So I incorporated the First/Last name fields as well as the Knowledge Base enhancement and a few other goodies.
The title will change to "Knowledge Base" if you are looking at the KB homepage and then will change to "KB:" + the article's Short description when looking at a specific article. Will also display "Service Catalog", "Survey" or the name of a properties page. Works in both the regular UI as well as the CMS.
Here's the code:
addLoadEvent(u_setCustomTitle);
function u_setCustomTitle(){
var defaultTitle = "Custom Window Title";
var title = defaultTitle;
//check for a window name first
var windowName = top.window.name.toLowerCase();
switch (windowName) {
case "workflow":
title="Workflow Editor";
break;
case "show_workflow_context":
title = "Running Workflow(s)";
break;
case "super_bsm_map":
title = "BSM Map";
break;
case "super_schema":
title = "Schema Map";
break;
default:
try {
//grab some "normal" field values if a window name was not found
var name = g_form.getValue("name").replace("undefined","");
var firstName = g_form.getValue("first_name").replace("undefined","");
var lastName = g_form.getValue("last_name").replace("undefined","");
var number = g_form.getValue("number").replace("undefined","");
var shortDescription = g_form.getValue("short_description").replace("undefined","");
if ($("sysverb_query") != undefined) {
title = "Search";
} else if (g_form.isNewRecord()) {
title = "New Record";
} else if (name) {
title = name;
} else if (firstName && lastName) {
title = firstName + " " + lastName;
} else if (firstName) {
title = firstName;
} else if (lastName) {
title = lastName;
} else if (number && shortDescription) {
title = number + " - " + shortDescription;
} else if (number) {
title = number;
} else if (shortDescription) {
title = shortDescription;
}
} catch(err) {}
if (title == defaultTitle) {
//maybe we are in the Knowledge Base view?
try {
if ($("kb_view")) {
title = "Knowledge Base";
var articleName = "";
articleName = $$('div[class="kb_article_header_short_description"]')[0].innerHTML;
}
if (articleName) {
title = "KB:" + articleName;
}
} catch(err) {}
}
if (title == defaultTitle) {
var caption = "";
//still nothing??? Maybe the Service Catalog or a Survey
try {
caption = $$('div[class="caption"]')[0].innerHTML;
if (caption.indexOf("Service Catalog") > -1) {
title = "Service Catalog";
} else if (caption.indexOf("Survey") > -1) {
title = "Survey";
}
} catch(err) {}
}
if (title == defaultTitle) {
//Really?????? Keep digging, it might be a properties page?
try {
caption = $$('span[class="caption"]')[0].innerHTML;
title = caption;
} catch(err) {}
}
}
top.document.title = title;
}
I've attached the XML as well so you can just import it.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-08-2014 12:09 AM
i really like this idea, but is there a reason why this is being done on the client side rather than the server side? I'm working on making public knowledge articles open to Google crawling and a Google Search Appliance. Using Javascript to modify the page titles, unfortunately, doesn't do anything to change the page titles that appear in search results. When it becomes a priority, I will be trying to modify this script to work in a UI Macro that will modify the <title> tag before the HTML is output.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-16-2015 10:26 AM
I was able to do what I was looking for in a way that works for KB articles and resolved my issue of using a Google Search Appliance to index articles from ServiceNow with proper titles. The answer is here: RP is not Defined in UI Macro
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-15-2015 11:53 PM
Hi
This script is very usefull and works like a charm.
However there is an issue when I open a record in a new tab.
For example in the Incident Application menu I right click on Open and select 'Open link in New tab'.
Then from the list I select an indident.
The browser window title is now "INC0001234 | INC0001234 - my short description"
Is there any way I avoid the duplicate number?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-16-2015 05:46 PM
SN is doing something extra when the page is not within the normal frame. You could just drop out of the script if it is in a separate window/tab (add lines 7 - 10 from below) and let SN do its own thing:
addLoadEvent(u_setCustomTitle);
function u_setCustomTitle(){
//drop out if in the CMS Portal
if (window.top.location.toString().indexOf("service-now.com/ess/") > -1) {
return;
}
//...or in a separate window/tab
if (window.name== ""){
return;
}
var defaultTitle = "Custom Window Title";
...
...
