在我们的项目中,我们一直在使用一种功能,当我们选择一些文本并在其上单击鼠标右键时,该文本将被复制,而再次单击鼠标右键将导致复制的文本粘贴到javascript中。该代码在IE11之前运行良好。在IE11中,我们收到错误消息
textEl.caretPos = document.selection.createRange().duplicate();
我做了很多研究,发现IE11不再支持document.selection,我们需要使用window.getSelection(),但这也不起作用。我尝试了所有组合
window.getSelection(); window.document.getSelection(); document.getSelection(); window.external.menuArguments.document.getSelection();
没有任何效果。我已经引用了这些链接Unable to get property 'createRange' of undefined or null reference
https://tracker.phpbb.com/browse/PHPBB3-12094
https://social.msdn.microsoft.com/Forums/ie/en-US/138e9cbc-aee7-46fc-bb7e-c5112e88497a/unable-to-get-property-createrange-of-undefined-or-null-reference?forum=ieextensiondevelopment
这些dint帮助了他们要求使用window.getSelection()的任何地方。
这是我的代码:
编辑:
请注意,以下代码在IE7 / 8和chrome中可以正常使用,因为
window.getSelection().toString()
为空,因此在IE11上不起作用。另外,请注意在iframe中是否存在任何差异。/**
* Copies or Pastes text into a text box. If the
* text is selected, then right clicking on it does a copy.
* If no text is selected, then right clicking invokes a paste
* of any clipboard text into the textbox.
*
* NOTE: Pasting will replace any value already in the textbox
*/
function copyPasteHelper()
{
// if something is currently selected, copy it
var selectedText = "";
if(document.selection != null){// for IE 8 and below only
storeCaret (event.srcElement);
selectedText = document.selection.createRange().text;
}else if(typeof window.getSelection() != "undefined") // for IE 9+ and Chrome
{
//storeCaret (event.srcElement);
selectedText = window.getSelection().toString();
alert(selectedText);//this is empty
}
if (selectedText != "")
{
if(window.clipboardData)
{
window.clipboardData.setData("Text", selectedText);
var lefter2 = event.offsetY+0;
var topper2 = event.offsetX+15;
// oCopiedPopup.show(topper2, lefter2, 80, 23, window.event.srcElement);
}
else
{
jQuery("#clipboard", window.parent.document).val(selectedText);
}
}
else // if nothing is selected, paste whatever text is in the clipboard
{
pasteHelper();
}
}
任何帮助将不胜感激,非常感谢。
最佳答案
万一它对任何人都有帮助。我为此苦苦挣扎,最终发现这是因为我试图在无效的上下文中使用window.getSelection()。它不返回input:text或textarea中的选定文本。相反,我必须使用selectionStart和selectionEnd,然后从输入元素中提取值并从那里解析所选的文本。感谢http://help.dottoro.com/ljcvonpc.php提供此信息。
关于javascript - 无法从window.getselection获取任何值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28980383/