在我们的项目中,我们一直在使用一种功能,当我们选择一些文本并在其上单击鼠标右键时,该文本将被复制,而再次单击鼠标右键将导致复制的文本粘贴到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/

10-09 12:51