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;
}-*/;
以下代码通过 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;
}-*/;