facebook如何在链接被检测时检测到

Facebook的状态更新输入(嗯,contenteditable div)检测链接。

键入链接时,它会等到空格键被按下后才能获取URL。

粘贴链接时,它会立即获取URL。

我可以在按下空格键后解析url…但我不确定何时检测内容被粘贴。

任何解决方案都会很棒; 一个jQuery格式的解决方案将是最好的!

现代浏览器支持onpaste :

   onpaste event example   

Play with this editor!

Log

听听现场的keyup事件。 如果字段的内容在一个keyup后更改了超过1个字符,则粘贴了一些内容。

正如@epascarello指出的那样,检查右键单击事件,因为用户可能正在使用上下文菜单。

比较连续的onChange事件。 如果它们之间的差异超过一个字符,那就是粘贴。 否则它输入了。

我实际上建议它监听每个keyup因为它有多种用途,如果你输入@它会建议朋友等。

它可能会扫描文本并查找链接并生成链接,链接良好,然后抓取页面,以便将其发布为“共享”页面。

        

我认为最可靠的方法是自己实现它,例如:

 $(document).ready(function(){ var ctrl = false; var pasted = 0; $("#paste").keydown(function(e) { var code = (e.keyCode ? e.keyCode : e.which); $("#console").val($("#console").val()+String(code)+","); if (!ctrl && code == 17){ ctrl = true; }else{ if(ctrl && code == 86){ $(".paste>div")[0].innerHTML = "Pasted "+(++pasted)+"x"; } } }); $("#paste").keyup(function(e) { var code = (e.keyCode ? e.keyCode : e.which); if (code == 17){ ctrl = false; } }); }); 
 $(document).ready(function(){ var ctrl = false; var pasted = 0; $("#paste").keydown(function(e) { var code = (e.keyCode ? e.keyCode : e.which); $("#console").val($("#console").val()+String(code)+","); if (!ctrl && code == 17){ ctrl = true; }else{ if(ctrl && code == 86){ $(".paste>div")[0].innerHTML = "Pasted "+(++pasted)+"x"; } } }); $("#paste").keyup(function(e) { var code = (e.keyCode ? e.keyCode : e.which); if (code == 17){ ctrl = false; } }); }); 
 div.top { width: 100%; display: inline-block; } div.top>div { width: 50%; display: inline-block; float: left; padding: 0px 10px 0px 0px; box-sizing: border-box; } textarea { width: 100%; height: 100px; resize: none; box-sizing: border-box; } 
  
Try paste here:
Console:
Pasted:

以半秒为增量检查字段。 如果检测到文本量发生较大变化,则可能已粘贴。

keypress在IE8中不起作用。 请改用keydown。