IE 8 iFrame仅在首次加载时导致JavaScript错误

时间:2014-02-13 08:35:41

标签: javascript internet-explorer iframe

我在页面上使用iframe,它由带有输入元素的表单组成。 每个输入元素都有一个onblur()事件,用于验证输入。

当我在IE 8中使用新清除的缓存打开页面时,会产生类似的javascript错误。

document.getElementById(...)' is Null or not an Object

但是,当我检查表单时,它会被完全加载,并且我正在尝试访问它。 此外,当我重新加载整个页面时,我不再有任何错误。 此外,当我自己加载iframe的内容时,我也不会出错。

Firefox和Chrome根本不会抛出错误。

简而言之,我得到的Javascript错误只发生在IE中,并且只有当我使用iframe显示表单(这是必需的)时才会出现,并且只有在第一次加载页面时才会出现。

关于如何解决此问题的任何想法?

我希望它不会让人感到困惑。

编辑:

document.getElementById("vHint_"+fieldName).innerHTML=data;

FieldName是输入字段的id。数据是验证的返回值。 在这种情况下,数据是图像标签。 每个输入字段都是一个标记为“vHint _”+ fieldName。

的范围标记

事件的附件如下:

<input id="Jahr" class="input" type="text" onblur="validDate(this,'Jahr','_beginn')" maxlength="4" style="width:32px" value="" name="Jahr">

1 个答案:

答案 0 :(得分:1)

首先感谢您的努力。 提供的示例user13500像魅力一样工作。 它让我深入挖掘。

我找到了解决方案。

所有输入字段都是使用自制的ASP Framework创建的,它将所有输入字段都放在Session中。 iframe中输入字段的onblur()事件触发对ASP文件的AJAX请求,将输入字段的名称作为请求参数传递。 ASP文件现在尝试在Session中查找字段并检索其值以验证输入。 之后,结果将发布回javascript文件,然后使用document.getElementById("vHint_"+fieldName).innerHTML=data;将结果发布回页面。

这通常没有错误。 但是,由于应用程序在iframe中运行,并且周围页面的域和iframe中的应用程序不同,因此IE拒绝iframe的会话。因此,ASP验证的结果为空,因为它无法在Session中找到该字段。

认识到唯一需要做的就是在应用程序中添加这行代码:

Response.AddHeader "P3P", "CP=""CAO PSA OUR"""

这样IE就不再拒绝应用程序的会话了。 也许这对其他人也有用。