这是pastehandler.js
$(function () {
$('div.popp_dialog').each(function (i, el) {
var paste = (new $.paste()).appendTo(el).on('pasteImage', function (ev, data) {
var dataUrl = getBase64Image(data.dataURL);
var imageType = "image/jpeg";
if (data.dataURL.indexOf("image/png") > 0)
imageType = "image/png";
opener.uploadFileOnPaste(dataUrl, imageType);
// closeWindow();
window.close();
})
.on('pasteText', function (ev, data) {
alert("Pasted content is not valid. Please paste image content.");
});
$(el).click(function () {
$(paste).focus();
});
if (i == 0) {
paste.focus();
}
});
});//]]>
这是我的paste.js文件
(function() {
var $, getImageData, readImagesFromEditable;
$ = jQuery;
readImagesFromEditable = function(element, cb) {
return setTimeout((function() {
return $(element).find('img').each(function(i, img) {
return getImageData(img.src, cb);
});
}), 1);
};
getImageData = function(src, cb) {
var loader;
loader = new Image();
loader.onload = function() {
var canvas, ctx, dataURL;
canvas = document.createElement('canvas');
canvas.width = loader.width;
canvas.height = loader.height;
ctx = canvas.getContext('2d');
ctx.drawImage(loader, 0, 0, canvas.width, canvas.height);
dataURL = null;
try {
dataURL = canvas.toDataURL('image/png');
} catch (_error) {
}
if (dataURL) {
return cb({
dataURL: dataURL,
width: loader.width,
height: loader.height
});
}
};
return loader.src = src;
};
$.paste = function() {
var div;
div = document.createElement('div');
div.contentEditable = true;
$(div).css({
width: 1,
height: 1,
position: 'fixed',
left: -100,
overflow: 'hidden'
}).on('paste', function(ev) {
var clipboardData, item, reader, text, _i, _len, _ref, _ref1, _ref2, _ref3,
_this = this;
if (((_ref = ev.originalEvent) != null ? _ref.clipboardData : void 0) != null) {
clipboardData = ev.originalEvent.clipboardData;
if (clipboardData.items) {
_ref1 = clipboardData.items;
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
item = _ref1[_i];
if (item.type.match(/^image\//)) {
reader = new FileReader();
reader.onload = function(event) {
return getImageData(event.target.result, function(data) {
return $(div).trigger('pasteImage', data);
});
};
reader.readAsDataURL(item.getAsFile());
}
if (item.type === 'text/plain') {
item.getAsString(function(string) {
return $(div).trigger('pasteText', {
text: string
});
});
}
}
} else {
if (clipboardData.types.length) {
if ((_ref2 = (text = clipboardData.getData('Text'))) != null ? _ref2.length : void 0) {
$(div).trigger('pasteText', {
text: text
});
}
} else {
readImagesFromEditable(div, function(data) {
return $(div).trigger('pasteImage', data);
});
}
}
}
if (clipboardData = window.clipboardData) {
if ((_ref3 = (text = clipboardData.getData('Text'))) != null ? _ref3.length : void 0) {
$(div).trigger('pasteText', {
text: text
});
} else {
readImagesFromEditable(div, function(data) {
return $(div).trigger('pasteImage', data);
});
}
}
return setTimeout((function() {
return $(div).html('');
}), 2);
});
return $(div);
};
}).call(this);
基本上这个Paste.js和pastehandler.js是子窗口脚本。
我的代码在除IE11之外的所有浏览器上都能正常工作。我认为appendTo
会导致问题。
我试过了与(new $.paste()).empty().append(el)
$(el).append(new $.paste())
不同的方式
既没有奏效。我认为它需要一些丑陋的代码才能使听众正确。
有人可以帮帮我吗在此先感谢。