【问题标题】:IE 8 iFrame causes JavaScript errors on first load onlyIE 8 iFrame 仅在首次加载时导致 JavaScript 错误
【发布时间】:2014-02-13 08:35:40
【问题描述】:

我在我的页面上使用了一个 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。数据是验证的返回值。 在这种情况下,数据是一个图像标签。 在每个输入字段之后是一个跨度标签,其 id 为“vHint_”+fieldName。

事件是这样附加的:

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

【问题讨论】:

  • 那么,onload 你通过getElementById() 循环并附加onblur,这就是错误发生的地方?
  • 用户在输入元素中输入数据后触发 onblur。然后验证输入,然后使用 getElementById() 来显示输入是否正确。
  • 你能把你的代码添加到错误发生的地方吗
  • 是的,但是错误在何时何地出现?加载时、第一次模糊时等。脚本驻留在哪里?在 iframe 或母 DOM 中。它是附加在标题、内联还是外部脚本中?如何以及在哪里?错误是由什么触发的? – 如果你能做一个最小的例子,例如jsfiddle 这很可能会很有帮助。
  • 脚本位于 iframe 内容的头部。该事件由用户填写数据触发。所以错误发生在第一个 onblur() 事件

标签: javascript internet-explorer iframe


【解决方案1】:

首先感谢您的努力。 user13500 提供的示例就像一个魅力。 它让我更深入地挖掘。

我找到了解决方案。

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

这通常可以正常工作。 但是,由于应用程序运行在 iframe 中,并且周围页面的域与 iframe 中的应用程序不同,IE 拒绝 iframe 的 Session。因此 ASP 验证的结果是空的,因为它在 Session 中找不到该字段。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多