禁用 IE 中带有“contentEditable”标志的元素的自动 URL 检测

Posted

技术标签:

【中文标题】禁用 IE 中带有“contentEditable”标志的元素的自动 URL 检测【英文标题】:Disable Automatic URL detection for Elements with 'contentEditable' flag in IE 【发布时间】:2011-03-31 23:38:19 【问题描述】:

当我在启用了“contentEditable”标志的任何元素中粘贴任何文本时,IE 会自动查找超链接或电子邮件地址并将其替换为

<a href="hyperlink">hyperlink</a>.

如何在 IE 中禁用带有“contentEditable”标志的元素(例如 div、span 等)的自动 url 检测,或者至少获取粘贴在 div 中的实际文本。

最好的问候,凯沙夫

【问题讨论】:

【参考方案1】:

很遗憾,没有跨版本的解决方案。 在 IE9 中有机会,允许禁用自动超链接:

document.execCommand("AutoUrlDetect", false, false);

更多信息:http://msdn.microsoft.com, http://bytes.com

【讨论】:

【参考方案2】:

我不认为你可以。您需要捕获paste 事件并设置一个简短的计时器来调用删除链接的函数。

2012 年 9 月 30 日编辑

IE 9 及更高版本可以关闭此功能。请参阅 Maxon 的答案。

【讨论】:

【参考方案3】:

我在空格键、回车键、制表键的 keydown 事件上使用 preventDefault 来防止 URL 检测。在 IE11 和 Chrome 上测试。

document.getElementById("input").addEventListener("keydown", function (e) 
  var SPACEKEY = 32;
  var ENTERKEY = 13;
  var TABKEY = 9;

  var whiteSpace = "";

  if (e.keyCode == SPACEKEY || e.keyCode == ENTERKEY || e.keyCode == TABKEY) 
    e.preventDefault();

    if (e.keyCode == SPACEKEY) 
      whiteSpace = " ";
     else if (e.keyCode == ENTERKEY) 
      whiteSpace = "\n";
     else if (e.keyCode == TABKEY) 
      whiteSpace = "\t";
    

    var selection = document.getSelection();
    var start = selection.anchorOffset > selection.focusOffset ? selection.focusOffset : selection.anchorOffset;
    var end = selection.anchorOffset > selection.focusOffset ? selection.anchorOffset : selection.focusOffset;

    $(this).text($(this).text().substring(0, start)
      + " "
      + $(this).text().substring(end));
    var range = document.createRange();
    range.setStart($(this)[0].firstChild, start + 1);
    range.setEnd($(this)[0].firstChild, start + 1);
    selection.removeAllRanges();
    selection.addRange(range);
  
  return false;
);

【讨论】:

【参考方案4】:

它似乎适用于 Chrome:按住 Ctrl+Alt 可暂时禁用链接。当您按住 Ctrl+Alt 时,此扩展会禁用链接。这允许从链接中间选择文本,并且通常可以简化选择,消除在复制链接时单击链接的风险。

【讨论】:

以上是关于禁用 IE 中带有“contentEditable”标志的元素的自动 URL 检测的主要内容,如果未能解决你的问题,请参考以下文章

禁用 UIWebView 中 contenteditable div 的自动大写

如果已经在 contenteditable 上打字,则禁用打字机功能

双击内部带有 contenteditable 的 div 并且 iframe 禁用 div

如何在 IE 的 contentEditable div 中获取选定的文本节点?

如何在 IE 的 contentEditable div 中获取选定的文本节点?

在contenteditable div中禁用图像的大小调整