window.getSelection() 在 运行 通过 JSNI 和 IE 时不起作用

window.getSelection() Does Not Work When Run Via JSNI and On IE

以下代码通过 JSNI 在 Chrome 和 Firefox 上运行,在纯 JavaScript 的所有浏览器上运行,但通过 JSNI 在 IE 上运行。

GWT JSNI:

    // windowEl is the contentWindow of an iframe
    protected native Element insertImage(String src, String title, String cssClassname, Element windowEl)
    /*-{
         var result = null;
         var selRanges = windowEl.getSelection();   // no ranges returned here on IE
         if (selRanges.rangeCount > 0) {
             var curRange = selRanges.getRangeAt(0);
             if (curRange.toString().length == 0) {
                 var imageNode = windowEl.document.createElement('img');
                 imageNode.src = src;
                 imageNode.alt = title;
                 imageNode.title = title;
                 imageNode.className = cssClassname;
                 curRange.insertNode(imageNode);
                 result = imageNode;
             }
         }
         return result;
     }-*/;

JavaScript:

 var myIframe = $doc.getElementById('my_iframe');
 var range = myIframe.contentWindow.getSelection().getRangeAt(0);
 var imageNode = myIframe.contentWindow.document.createElement('img');
 imageNode.src = 'goo.gl/Zun4LD';
 imageNode.alt = 'error';
 imageNode.title = 'error';
 imageNode.className = 'my_css_class';
 range.insertNode(imageNode);

当 getSelection() returns 当 运行 通过 JSNI 在 IE 上没有任何内容时出现问题。

我正在使用 GWT 2.7 和 IE 10 进行测试。

知道为什么会这样吗?这是 GWT 2.7 的错误吗?

确保您的 iframe 的 contentWindow 没有失去焦点。 IE 无法像其他浏览器那样优雅地处理这些情况。

尝试:

// windowEl is the contentWindow of an iframe
protected native Element insertImage(String src, String title, String cssClassname, Element windowEl)
/*-{
     var result = null;
     windowEl.focus();  // ***** add this to be sure you're not losing focus
     var selRanges = windowEl.getSelection();   // no ranges returned here on IE
     if (selRanges.rangeCount > 0) {
         ...
     }
     return result;
 }-*/;