我正在进行跨浏览器粘贴捕获。我有这个工作&在Chrome和Firefox(在Mac上)测试过。它应在PC上的Chrome和Firefox上运行,但我还没有机会测试它。希望我不是重新发明轮子,我已经为jQuery插件或任何真正实现文档范围粘贴的javascript寻找了一些好处。
尚未在Opera(版本11.52)中工作(在Mac上,尚未在PC上测试过)。我的问题是,当按下cmd键时,当我按下v键时,我没有收到keydown
事件。我不确定如何解决这个问题,因为我对Opera不是很了解。
正在进行中的jsfiddle是here。
下面的javascript不能正常工作,请参阅jsfiddle了解工作脚本。要使脚本在下面工作,您需要this os检测插件。
要回答的问题 - 如何在Opera中完成这项工作?
如果您愿意,请留下评论 - 这对您有用吗? (发布浏览器,评论中的os版本)
更新 - 根据Baez留下的评论,这是一个仅限Mac的Opera。
update2 - 我已经更新了jsfiddle,它简化了一些代码,但仍无法让它在mac Opera中运行。
javascript(jquery)
$(document).ready(function() {
// Fake paste
var doFakePaste = false;
$(document).on('keyup', function(e) {
$('#status').html('');
if (($.client.os === "Mac" && e.which == 86 && e.metaKey) ||
($.client.os !== "Mac" && e.which == 86 && e.ctrlKey)) {
doFakePaste = false;
$('#paste').blur().remove();
}
}).on('keydown', function(e) {
$('#status').html('which: ' + e.which);
if (($.client.os === "Mac" && e.which == 86 && e.metaKey) ||
($.client.os !== "Mac" && e.which == 86 && e.ctrlKey)) {
doFakePaste = true;
// got a paste
$('<div></div>').attr('contenteditable', '').attr('id', 'paste').appendTo('body').on('paste', function(e) {
setTimeout(function() {
doFakePaste = false;
var html = $('#paste').html();
var text = $('#paste').text();
$('#resultA').text(html);
$('#resultB').text(text);
$('#paste').blur().remove();
}, 1);
}).focus();
}
});
$('#data').html('os: ' + $.client.os + ' browser: ' + $.client.browser);
});
html - 再次查看jsfiddle是否有工作副本
<p>Click in this window and do a paste (ctrl-v or cmd-v). The pasted text will show up in the boxes below. I hope... the left box will be the HTML and the right box will be the TEXT.</p>
<div id="status"></div>
<div id="data"></div>
<div id="resultA"></div>
<div id="resultB"></div>
答案 0 :(得分:0)
不是完整答案,而是我的部分经验:
您可以删除$.client.os
并使用e.which == 86 && (e.metaKey || e.ctrlKey)
您在document
上绑定了活动。在div[contenteditable="true"]
上绑定活动 - 可能有帮助
您的代码:attr('contenteditable', '')
。 contenteditable
可以是true
,false
和inherit
(=从父级获取价值)