内部有一个iframe的网页。有时,iframe内的输入文本框控件被锁定/冻结。用户无法在其中输入文本。但文本框可以聚焦而不是褪色。没有代码可以禁用输入控件,但这并不总是发生。到目前为止,这只发生在IE 9和IE 10中.Firefox和Chrome都可以。
页面工作原理的简要说明如下:
父页面上有一个按钮。通过点击它将构建一个 从头开始iframe并显示它。这是通过Javascript完成的。
再次,iframe上有一个按钮可以关闭它。通过点击它 将从父页面的DOM中删除iframe。
如果您需要更多信息,请与我们联系。提前谢谢。
答案 0 :(得分:35)
这个错误很烦人,更糟糕的是我们在google上找到的信息非常少。
微软只有一个关于IE9的链接,但IE10 / IE11中仍存在问题,更容易重现。
我刚刚创建了一个描述这个问题的小提琴
http://jsfiddle.net/WilliamLeung/T3JP9/1/
为什么M $多年来难以解决这个问题?
应该有三种解决方法
或安排"什么都不做"耗时的任务,可能会让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);
或重置DOM内容,然后将其从文档中删除
someDivWithIframe.innerHTML = "";
$(someDivWithIframe).remove();
我不确定它是否对所有情况都有帮助,你应该尝试一下
答案 1 :(得分:5)
jQuery 的解决方案适用于IE11 ,而非其他解决方案。
$(theIframeElement).empty().remove();
在IE9 / 10上工作的另一个解决方案是在删除之前将iframe src设置为空
iframe.src=""
但这导致异常&#34;访问被拒绝&#34;在IE11上如果你使用的是较旧的jQuery版本&lt; 1.11.1
一些链接: 有关信息,jQuery还为其在iframe中显示内容的Dialog.js插件修复了此问题:http://bugs.jqueryui.com/ticket/9122
jQuery错误修复IE11&#34;访问被拒绝&#34;错误:http://bugs.jquery.com/ticket/14535
答案 2 :(得分:4)
我设法通过将焦点设置回主页来修复此错误。到目前为止我所做的是: 在主页面中放置一个不可见的HTML输入文本框。当iframe关闭时,我将焦点设置回该文本框。
有关此IE错误的详细信息,请参阅以下链接。
答案 3 :(得分:3)
在IE 11中,没有一个解决方案适合我。
通过在iframe中添加此代码来解决此问题:
$("input").first().focus().blur();
显然,如果您无法控制您的iframe,这将无法运作。
答案 4 :(得分:3)
这对我来说对IE11有用,
document.body.focus();
答案 5 :(得分:2)
只是为了添加其他人所说的,当iframe中的某些输入具有焦点然后关闭导致所有其他输入失去焦点时,实际上是一个问题。确实有一个脚本将焦点设置为元素可以解决问题。但对我来说这是行不通的,因为我的一些输入被禁用了。所以对我有用的解决方案是
$("input[type=text]:not([disabled])").first().focus();
完整片段,因为我使用的是bootstrap模态,而模态有一个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();
});
答案 6 :(得分:1)
我最初编写下面的插件来解决IE 8中的内存泄漏,但是它也解决了这个问题。
答案 7 :(得分:1)
使用Javascript的简单解决方案对我有用,我在其他浏览器中看不到任何副作用:
<script>
var pswElement = document.getElementById("password");
pswElement.addEventListener("focus", myFocusFunction, true);
function myFocusFunction() {
document.getElementById("password").select();
}
</script>
无论如何都很难过MS也无法在更高版本中解决这样的问题。
答案 8 :(得分:0)
我也遇到了这个问题。正如William Leung指出的那样,IE有一个从DOM中移除Iframe
对象的错误。
尝试以下方法:
$(someDivWithIframe).empty().remove();
答案 9 :(得分:0)
我对IE11,angularjs和使用IFrame有同样的问题。
我的模板使用ng-switch
来更改视图模式。
其中一个视图模式包含IFrame。
我转离包含IFrame的视图模式的那一刻:
var iFrame = <HTMLIFrameElement>document.getElementById("myIFrame");
iFrame.focus();
this.mode = ViewModes.ModeWithoutIFrame;
解决了我的问题。
答案 10 :(得分:0)
这里有解决方案对我有用,在此页面上尝试过所有其他人!需要jQuery,但我确信如果有必要,可以在原生JavaScript中重写。
与许多其他解决方案一样,这应该添加到iframe的源,假设您有权修改它:
$("body").focusout( function () {
window.focus();
});