diff --git a/plugins/c9.ide.clipboard/html5.js b/plugins/c9.ide.clipboard/html5.js index e57b1f38..e8679221 100644 --- a/plugins/c9.ide.clipboard/html5.js +++ b/plugins/c9.ide.clipboard/html5.js @@ -51,21 +51,19 @@ define(function(require, exports, module) { function set(type, data, list) { if (notSupported(type)) return; - - type = convertType(type); if (nativeObject) { - nativeObject.setData(type, data); + handleClipboardData(nativeObject, type, data); return true; } var setData = function(e) { if (list) { list.forEach(function(type) { - e.clipboardData.setData(type, data); + handleClipboardData(e.clipboardData, type, data); }); } - e.clipboardData.setData(type, data); + handleClipboardData(e.clipboardData, type, data); e.preventDefault(); e.stopPropagation(); @@ -82,17 +80,15 @@ define(function(require, exports, module) { function get(type, full) { if (notSupported(type)) return; - - type = convertType(type); if (!full && nativeObject) - return nativeObject.getData(type); + return handleClipboardData(nativeObject, type); var data; var getData = function(e) { data = full ? e.clipboardData - : e.clipboardData.getData(type); + : handleClipboardData(nativeObject, type); e.preventDefault(); e.stopPropagation(); }; @@ -120,8 +116,22 @@ define(function(require, exports, module) { return !/text($|\/)/.test(type); } - function convertType(type) { - return document.all ? "Text" : type; + function handleClipboardData(clipboardData, type, data, forceIEMime) { + if (!clipboardData) + return; + // using "Text" doesn't work on old webkit but ie needs it + var mime = forceIEMime ? "Text" : type; + try { + if (data) { + // Safari 5 has clipboardData object, but does not handle setData() + return clipboardData.setData(mime, data) !== false; + } else { + return clipboardData.getData(mime); + } + } catch(e) { + if (!forceIEMime) + return handleClipboardData(clipboardData, type, data, true); + } } function wrap(obj) {