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

时间:2015-06-16 11:56:56

标签: gwt jsni

以下代码适用于Chrome和Firefox,通过JSNI和纯JavaScript中的所有浏览器,但不能通过JSNI在IE上使用。

GWT JSNI:

html {

width:120x;
margin-left:0px;

}

body{
    width:120px;
    font-family: arial;
    font: arial;
    margin-left: 0px;
    max-width:120px;
}

JavaScript的:

    // 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;
     }-*/;

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

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

为什么会发生这种情况的任何想法?这是GWT 2.7的错误吗?

1 个答案:

答案 0 :(得分:1)

确保您的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;
 }-*/;