Have you ever had the need to create a link or button to copy some text from a form or a list to the clipboard?
ServiceNow does that out of the box in a few places, so there is no need to reinvent the wheel!
Let’s have a look at the UI Action “Copy sys_id”:
runContextAction();
function runContextAction() {
copyToClipboard(g_sysId);
}
Code language: JavaScript (javascript)
Pretty simple, right?
You just need to use the function “copyToClipboard” and pass the text you want to copy as a parameter.
If you are interested in having a look at the function definition, you can find the latest version of the code in your instance: /script/functions_clipboard.js
/*! RESOURCE: /scripts/functions_clipboard.js */
window.NOW = window.NOW || {};
window.NOW.g_clipboard = {};
(function(exports) {
var browserReturnsErroneousStatus = navigator.userAgent.indexOf('MSIE 9') != -1 ||
navigator.userAgent.indexOf('MSIE 10') != -1 ||
navigator.userAgent.indexOf('rv:11') != -1;
exports.copyToClipboard = function(str, messageMethod) {
if (document.execCommand && isCapableMessageMethod(messageMethod)) {
var v = document.createElement('textarea');
v.innerHTML = str;
v.className = "sr-only";
document.body.appendChild(v);
v.select();
var result = true;
try {
result = document.execCommand('copy');
if (result && browserReturnsErroneousStatus) {
var checkDiv = document.createElement('textarea');
checkDiv.className = "sr-only";
document.body.appendChild(checkDiv);
checkDiv.select();
try {
document.execCommand('paste');
result = checkDiv.value == str;
} finally {
document.body.removeChild(checkDiv);
}
}
} catch (e) {
result = false;
if (window.jslog)
jslog("Couldn't access clipboard " + e);
} finally {
document.body.removeChild(v);
}
if (result) {
fireCopiedMessage(messageMethod);
return true;
}
}
legacyClipboardCopy(str);
return false;
}
function isCapableMessageMethod(messageMethod) {
if (messageMethod == 'custom')
return true;
return 'GlideUI' in window;
}
function fireCopiedMessage(messageMethod) {
if (!messageMethod || messageMethod == 'GlideUI') {
var span = document.createElement('span');
span.setAttribute('data-type', 'info');
span.setAttribute('data-text', getMessage('Copied to clipboard'));
span.setAttribute('data-duration', '2500');
GlideUI.get().fire(new GlideUINotification({
xml: span
}));
}
}
function legacyClipboardCopy(meintext) {
prompt("Because of a browser limitation the URL can not be placed directly in the clipboard. " +
"Please use Ctrl-C to copy the data and escape to dismiss this dialog", meintext);
}
})(window.NOW.g_clipboard);;
Code language: JavaScript (javascript)