Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 跨浏览器粘贴捕获-Mac Opera问题_Javascript_Jquery_Opera_Copy Paste - Fatal编程技术网

Javascript 跨浏览器粘贴捕获-Mac Opera问题

Javascript 跨浏览器粘贴捕获-Mac Opera问题,javascript,jquery,opera,copy-paste,Javascript,Jquery,Opera,Copy Paste,我正在进行跨浏览器粘贴捕获。我已经在Chrome和Firefox(在mac电脑上)上进行了测试。它应该可以在Chrome和Firefox上运行,但我还没有机会测试它。希望我不是在重新发明轮子,我已经为jQuery插件或任何真正实现文档范围粘贴的javascript寻找了一个好的位置 这是尚未在Opera(11.52版)中运行的(在mac上,尚未在PC上测试)。我的问题是,当按下cmd键时,当我按下v键时,我没有得到一个keydown事件。我不知道如何解决这个问题,因为我与Opera不是很相似 J

我正在进行跨浏览器粘贴捕获。我已经在Chrome和Firefox(在mac电脑上)上进行了测试。它应该可以在Chrome和Firefox上运行,但我还没有机会测试它。希望我不是在重新发明轮子,我已经为jQuery插件或任何真正实现文档范围粘贴的javascript寻找了一个好的位置

这是尚未在Opera(11.52版)中运行的(在mac上,尚未在PC上测试)。我的问题是,当按下cmd键时,当我按下v键时,我没有得到一个
keydown
事件。我不知道如何解决这个问题,因为我与Opera不是很相似

JSFIDLE正在进行中的工作

下面的javascript将无法正常工作,请参阅JSFIDLE以获取工作脚本。要使下面的脚本正常工作,您需要os检测插件

要回答的问题-我如何在Opera中实现这一点

如果您愿意,请留下评论-这对您有用吗?(在评论中发布浏览器、操作系统版本)

更新-根据贝兹留下的评论,这是一部仅限mac版的歌剧

update2-我已经更新了JSFIDLE,它稍微简化了代码,但仍然无法在mac Opera中运行


javascript(jquery)

$(文档).ready(函数(){
//假膏
var doFakePaste=false;
$(文档).on('keyup',函数(e){
$('#status').html('');
if($.client.os==“Mac”&&e.which==86&&e.metaKey)||
($.client.os!=“Mac”和&e.which==86和&e.ctrlKey)){
doFakePaste=false;
$('#粘贴').blur().remove();
}
}).on('keydown',功能(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;
//有浆糊吗
$('').attr('contenteditable','').attr('id','paste').appendTo('body').on('paste',函数(e){
setTimeout(函数(){
doFakePaste=false;
var html=$('#粘贴').html();
var text=$(“#粘贴”).text();
$('#resultA').text(html);
$('#resultB').text(text);
$('#粘贴').blur().remove();
}, 1);
}).focus();
}
});
$('#data').html('os:'+$.client.os+'浏览器:'+$.client.browser);
});
html-再次查看以获取工作副本

<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>
在此窗口中单击并执行粘贴(ctrl-v或cmd-v)。粘贴的文本将显示在下面的框中。我希望。。。左边的框是HTML,右边的框是文本


不是完整答案,而是我的部分经验:

  • 您可以删除
    $.client.os
    并使用
    e.which==86&(e.metaKey | | e.ctrlKey)

  • 您已将事件绑定到
    文档
    div[contenteditable=“true”]
    上的绑定事件-可能有帮助吗

  • 您的代码:
    attr('contenteditable','')
    <代码>内容可编辑可以是
    继承
    (=从父项获取值)


  • 不是完整答案,而是我的部分经验:

  • 您可以删除
    $.client.os
    并使用
    e.which==86&(e.metaKey | | e.ctrlKey)

  • 您已将事件绑定到
    文档
    div[contenteditable=“true”]
    上的绑定事件-可能有帮助吗

  • 您的代码:
    attr('contenteditable','')
    <代码>内容可编辑可以是
    继承
    (=从父项获取值)


  • 在Windows 7-Opera 11.60中对我有效在Windows 7-Opera 11.60中对我有效我们不能只使用这个而不使用浏览器检测吗。如果(e.type=='keydown'&&e.which==86&&(e.metaKey | | e.ctrlKey))我们不能只使用这个而不使用浏览器检测。if(e.type=='keydown'&&e.which==86&&e.metaKey | | e.ctrlKey))
    <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>