Platform
Custom Embedded Tabs
![]() Note | The Jabber embedded browser does not support cookie sharing with pop-ups from SSO enabled webpages. The content on the pop-up window may fail to load. |
- Custom Embedded Tab Definitions
- User Custom Tabs
- Custom Icons
- Chats and Calls from Custom Tabs
- UserID Tokens
- JavaScript Notifications
- Show Call Events in Custom Tabs
- Custom Embedded Tab Example
Custom Embedded Tab Definitions
<jabber-plugin-config> <browser-plugin> <page refresh="" preload=""> <tooltip></tooltip> <icon></icon> <url></url> </page> </browser-plugin> </jabber-plugin-config>
Cisco Jabber for Windows supports Internet Explorer version 9 or earlier. The client uses Internet Explorer in version 9 mode if a later version is on the workstation.
User Custom Tabs
Users can create their own custom embedded tabs through the client user interface.
<Options> <AllowUserCustomTabs>true</AllowUserCustomTabs> </Options>
![]() Note | User custom embedded tabs are set to true by default. |
Custom Icons
Chats and Calls from Custom Tabs
- Use the XMPP: or IM: protocol handler to start chats.
- Use the TEL: protocol handler to start audio and video calls.
UserID Tokens
You can specify the ${UserID} token as part of the value for the url parameter. When users sign in, the client replaces the ${UserID} token with the username of the logged in user.
![]() Tip | You can also specify the ${UserID} token in query strings; for example, www.cisco.com/mywebapp.op?url=${UserID}. |
JavaScript Notifications
You can implement JavaScript notifications in custom embedded tabs. This topic describes the methods the client provides for JavaScript notifications. This topic also gives you an example JavaScript form that you can use to test notifications. It is beyond the scope of this documentation to describe how to implement JavaScript notifications for asynchronous server calls and other custom implementations. You should refer to the appropriate JavaScript documentation for more information.
Notification Methods
-
SetNotificationBadge — You call this method from the client in your JavaScript. This method takes a string value that can have any of the following values: -
onPageSelected() — The client invokes this method when users select the custom embedded tab.
-
onPageDeselected() — The client invokes this method when users select another tab.
![]() Note | Not applicable for Jabber for iPhone and iPad |
Subscribe to Presence in Custom Tabs
Get Locale Information in Custom Tabs
![]() Note | Jabber for iPad and iPhone only supports OnLocaleInfoAvailable. |
Example JavaScript
<html>
<head>
<script type="text/javascript">
function OnPresenceStateChanged(jid, basicPresence, localizedPresence)
{
var cell = document.getElementById(jid);
cell.innerText = basicPresence.concat(", ",localizedPresence);
}
function GetUserLocale()
{
window.external.GetUserLocale();
}
function SubscribePresence()
{
window.external.SubscribePresence('johndoe@example.com');
}
function OnLocaleInfoAvailable(currentLocale)
{
var cell = document.getElementById("JabberLocale");
cell.innerText = currentLocale;
}
function onHubActivated()
{
var cell = document.getElementById("hubActive");
cell.innerText = "TRUE";
}
function onHubDeActivated()
{
var cell = document.getElementById("hubActive");
cell.innerText = "FALSE";
}
function onHubResized()
{
alert("Hub Resized or Moved");
}
function OnLoadMethods()
{
SubscribePresence();
GetUserLocale();
}
</script>
</head>
<body onload="OnLoadMethods()">
<table>
<tr>
<td>John Doe</td>
<td id="johndoe@example.com">unknown</td>
</tr>
</table>
<table>
<tr>
<td>Jabber Locale: </td>
<td id="JabberLocale">Null</td>
</tr>
<tr>
<td>Hub Activated: </td>
<td id="hubActive">---</td>
</tr>
</table>
</body>
</html>
To test this example JavaScript form, copy the preceding example into an HTML page and then specify that page as a custom embedded tab.
Show Call Events in Custom Tabs
You can use the following JavaScript function to show call events in a custom tab:
OnTelephonyConversationStateChanged — An API in the telephony service enables the client to show call events in a custom embedded tab. Custom tabs can implement the OnTelephonyConversationStateChanged JavaScript function. The client calls this function every time a telephony conversation state changes. The function accepts a JSON string that the client parses to get call events.
The following snippet shows the JSON that holds the call events:
{ "conversationId": string, "acceptanceState": "Pending" | "Accepted| | "Rejected", "state": "Started" | "Ending" | "Ended", "callType": "Missed" | "Placed" | "Received" | "Passive" | "Unknown", "remoteParticipants": [{participant1}, {participant2}, …, {participantN}], "localParticipant": { } }
Each participant object in the JSON can have the following properties:
{ "voiceMediaDisplayName": "<displayName>", "voiceMediaNumber": "<phoneNumber>", "translatedNumber": "<phoneNumber>", "voiceMediaPhoneType": "Business" | "Home" | "Mobile" | "Other" | "Unknown", "voiceMediaState": "Active" | "Inactive" | "Pending" | "Passive" | "Unknown", }
The following is an example implementation of this function in a custom embedded tab. This example gets the values for the state and acceptanceState properties and shows them in the custom tab.
function OnTelephonyConversationStateChanged(json) { console.log("OnTelephonyConversationStateChanged"); try { var conversation = JSON.parse(json); console.log("conversation id=" + conversation.conversationId); console.log("conversation state=" + conversation.state); console.log("conversation acceptanceState=" + conversation.acceptanceState); console.log("conversation callType=" + conversation.callType); } catch(e) { console.log("cannot parse conversation:" + e.message); } }
The following is an example implementation of this function with all possible fields:
function OnTelephonyConversationStateChanged(json) { console.log("OnTelephonyConversationStateChanged"); try { var conversation = JSON.parse(json); console.log("conversation state=" + conversation.state); console.log("conversation acceptanceState=" + conversation.acceptanceState); console.log("conversation callType=" + conversation.callType); for (var i=0; i<conversation.remoteParticipants.length; i++) { console.log("conversation remoteParticipants[" + i + "]="); console.log("voiceMediaDisplayName=" + conversation.remoteParticipants[i].voiceMediaDisplayName); console.log("voiceMediaNumber=" + conversation.remoteParticipants[i].voiceMediaNumber); console.log("translatedNumber=" + conversation.remoteParticipants[i].translatedNumber); console.log("voiceMediaPhoneType=" + conversation.remoteParticipants[i].voiceMediaPhoneType); console.log("voiceMediaState=" + conversation.remoteParticipants[i].voiceMediaState); } console.log("conversation localParticipant="); console.log(" voiceMediaDisplayName=" + conversation.localParticipant.voiceMediaDisplayName); console.log(" voiceMediaNumber=" + conversation.localParticipant.voiceMediaNumber); console.log(" translatedNumber=" + conversation.localParticipant.translatedNumber); console.log(" voiceMediaPhoneType=" + conversation.localParticipant.voiceMediaPhoneType); console.log(" voiceMediaState=" + conversation.localParticipant.voiceMediaState); } catch(e) { console.log("cannot parse conversation:" + e.message); } }
Custom Embedded Tab Example
<?xml version="1.0" encoding="utf-8"?> <config version="1.0"> <Client> <jabber-plugin-config> <browser-plugin> <page refresh ="true" preload="true"> <tooltip>Cisco</tooltip> <icon>https://www.cisco.com/web/fw/i/logo.gif</icon> <url>https://www.cisco.com</url> </page> </browser-plugin> </jabber-plugin-config> </Client> </config>
Configure Automatic Updates
Applies to: Cisco Jabber for Windows, Cisco Jabber for Mac
![]() Note | If you use the Cisco WebEx Messenger service for instant messaging and presence capabilities, you should use the Cisco WebEx Administration Tool to configure automatic updates. |
- XML File Structure
XML files for automatic updates have the following structure:
<JabberUpdate> <App name=”JabberWin”> <LatestBuildNum>12345</LatestBuildNum> <LatestVersion>10.5.x</LatestVersion> <Mandatory>true</Mandatory> <Message> <![CDATA[<b>This new version of Cisco Jabber lets you do the following:</b><ul><li>Feature 1</li><li>Feature 2</li></ul>For more information click <a target="_blank" href="http://cisco.com/go/jabber">here</a>.]]> </Message> <DownloadURL>http://http_server_name/CiscoJabberSetup.msi</DownloadURL> </App> </JabberUpdate>
- Example XML File 1
The following is example XML file for automatic updates:
<JabberUpdate> <App name="JabberWin"> <LatestBuildNum>12345</LatestBuildNum> <LatestVersion>9.x</LatestVersion> <Message><![CDATA[<b>This new version of Cisco Jabber lets you do the following:</b><ul><li>Feature 1</li><li>Feature 2</li></ul>For more information click <a target="_blank" href="http://cisco.com/go/jabber">here</a>.]]></Message> <DownloadURL>http://http_server_name/CiscoJabberSetup.msi</DownloadURL> </App> </JabberUpdate>
- Example XML File 2
The following is an example XML file for automatic updates for both Cisco Jabber for Windows and Cisco Jabber for Mac:
<JabberUpdate> <App name="JabberMac"> <LatestBuildNum>12345</LatestBuildNum> <LatestVersion>9.6.1</LatestVersion> <Message><![CDATA[<b>This new version of Cisco Jabber lets you do the following:</b><ul><li>Feature 1</li><li>Feature 2</li> </ul>For more information click <a target="_blank" href="http://cisco.com/go/jabber">here</a>.]]> </Message> <DownloadURL>http://http_server_name/Cisco-Jabber-Mac-9.6.1-12345-MrbCdd.zip</DownloadURL> </App> <App name="JabberWin"> <LatestBuildNum>12345</LatestBuildNum> <LatestVersion>9.0</LatestVersion> <Message><![CDATA[<b>This new version of Cisco Jabber lets you do the following:</b><ul><li>Feature 1</li><li>Feature 2 </li></ul>For more information click <a target="_blank" href="http://cisco.com/go/jabber">here</a>.]]> </Message> <DownloadURL>http://http_server_name/CiscoJabberSetup.msi </DownloadURL> </App> </JabberUpdate>
-
Install and configure an HTTP server to host the XML file and installation package.
-
Ensure users have permission to install software updates on their workstations.
Microsoft Windows stops update installations if users do not have administrative rights on their workstations. You must be logged in with administrative rights to complete installation.