23

里面有一个带iframe的网页。有时,iframe内的输入文本框控件被锁定/冻结。用户不能输入文字。但文本框可以集中并且不会褪色。没有代码禁用输入控件,这并不总是会发生。到目前为止,这只发生在IE 9和IE 10中。Firefox和Chrome是可以的。IE 9和IE 10不能在输入文本框中不时输入文字

的页面是如何工作的简要说明:

  • 有父页面上的按钮。通过点击它将从头开始构建一个 iframe并显示它。这是由Javascript完成的。

  • 再次,iframe上有一个按钮可以关闭它。通过点击它
    将从父页面的DOM中移除iframe。

如果您需要更多信息,请让我知道。提前致谢。

+0

拨弄请! – Arun

+0

是否有任何z-index应用于字段容器的CSS?你能找出这个问题吗? –

+0

?我有类似的东西 – ajp

回答

28

此错误是很烦人的,更糟糕​​的还有,我们可以发现在谷歌很少的信息。

微软只有一个关于IE9的链接,但问题仍然存在于IE10/IE11中,并且更容易重现。

我刚才创建一个小提琴来形容这个问题

http://jsfiddle.net/WilliamLeung/T3JP9/1/

为什么就这么难M $来解决这个问题几年了?

应该有三种解决方法

  1. 我们每次修改DOM是iframe
  2. 或安排一个“什么都不做”耗时的任务,这可能使IE响应鼠标事件神奇后,重置焦点,我不能告诉你为什么,也许M $可能

    样本代码,其设置一个耗时的任务

    setInterval(function() { 
        var loopCount = 10000; 
        var x = 0; 
        for (var i = 0; i < loopCount; i++) { 
         x = (x + Math.random() * 1000) >>> 0; 
        } 
        return x; 
    }, 1000); 
    
  3. 或之前重置DOM内容从文件

    someDivWithIframe.innerHTML = ""; 
    $(someDivWithIframe).remove(); 
    

    删除它,我不知道这是否有助于对所有的情况下,你应该有一个尝试

+0

这使我疯狂了近2天。我们的测试人员和PM确信这是我们代码中的一些不良逻辑。事实证明,我们使用了几个CK编辑器,这些编辑器将根据其他设置被删除或添加,如果您在其中一个CK中被移除时碰巧聚焦在其中一个,它就会被吃掉。我的修复只是做一个.blur()和。焦点()已知元素 – Mungoid

+0

“微软只有一个关于IE9的链接”(请给我们链接!) –

+0

@JamiePate我在自己的答案中添加了一些关于此错误的链接。 –

3

我已经设法通过将焦点设置回主页面来修复此错误。到目前为止我所做的是: 在主页面中放置了一个HTML输入文本框,它被设置为不可见。当iframe关闭时,我将焦点设置回该文本框。

有关此错误的更多信息,请参阅以下链接。

link1

link2

0

我也从这个问题的痛苦。正如William Leung指出的那样,IE有一个删除Iframe DOM对象的bug。

尝试以下操作:

$(someDivWithIframe).empty().remove(); 
4

使用jQuery 该解决方案在IE11 工作对我来说,没有其他的解决方案。

$(theIframeElement).empty().remove();

的其他解决方案上IE9/10的工作是设置IFRAME SRC在删除之前将其清空

iframe.src=""

但是,这会导致异常的“拒绝访问”的IE11,如果你正在使用较旧的jQuery版本< 1.11.1

某些链接: 有关信息,jQuery还修复了此问题,因为它的Dialog.js插件t帽子在iframe显示内容:http://bugs.jqueryui.com/ticket/9122

jQuery的bug修复到IE11“拒绝访问”错误:http://bugs.jquery.com/ticket/14535

+0

哦,对不起,我犯了一个错误,焦点问题刚刚回来在我的IE11上!我想哭 !所以目前没有为IE11的解决方案 – JcAspes

+0

我在做一个window.focus()后删除iframe。删除window.focus()缝,使IE11上的bug消失,但有一段时间(随机)IE11的BUG回来 – JcAspes

3

无解的,在IE工作对我来说11

通过增加内部的iframe的代码解决了这个问题:

$("input").first().focus().blur();

显然,这将无法正常工作,如果你无法控制你的iframe。

+0

这对我很好,谢谢! ---投票! –

0

我有与IE11,angularjs和使用IFrame相同的问题。 我的模板使用ng-switch更改视图模式。 其中一种视图模式包含一个IFrame。 我从包含IFRAME的视图模式中切换出来的那一刻:

var iFrame = <HTMLIFrameElement>document.getElementById("myIFrame"); 
iFrame.focus(); 
this.mode = ViewModes.ModeWithoutIFrame; 

解决这个问题对我来说。

0

使用Javascript这对我的作品和我简单的解决方案看不出有什么副作用,在其他浏览器:

<script> 
    var pswElement = document.getElementById("password"); 
    pswElement.addEventListener("focus", myFocusFunction, true); 

    function myFocusFunction() {  
    document.getElementById("password").select(); 
    } 
</script> 

反正是很可悲的MS是不是在高版本能够解决此类问题太多。

1

只是添加到别人说的话,它实际上是一个问题,当一个iframe中的某些输入焦点被关闭导致所有其他输入失去焦点。确实有一个脚本来将焦点集中到一个元素上来解决问题。但对我来说,这不起作用,因为我的一些输入被禁用。所以这对我工作的解决方案是低于

$("input[type=text]:not([disabled])").first().focus(); 

完整的片段,因为我是用引导模式和模态有一个iframe中。我将焦点设置为可编辑的字段打开模型前和结束后:

var modalInstance = $uibModal.open({ 
    // modal properties 
    }); 
modalInstance.closed.then(function() { 
    $("input[type=text]:not([disabled])").first().focus(); 
}); 
modalInstance.opened.then(function() { 
    $("input[type=text]:not([disabled])").first().focus(); 

}); 
2

这为我工作在IE11,

  • 原因要点的(除了IE愚蠢):
    • 聚焦输入元件由IFRAME(CSS显示属性)内显示除去
  • 问题:
    • 输入的文本元素不能被点击,你仍然可以选项卡,它不过
  • 解决方法:
    • 我们需要采取一个输入框出来之前进行对焦()已知可见元素显示器,所以就行了,我们从一个输入字段需要显示走之前,我们有行:document.body.focus();
0

这里的SOLU这对我来说很有效,在这个页面上尝试了所有其他的东西!需要jQuery,但我相信如果必要的话,它可以在原生JavaScript中重写。

与许多其他的解决方案,这应该被添加到源的iframe,假设你有机会对其进行修改:

$("body").focusout(function() { window.focus(); });