【问题标题】:Accessing frames via the DOM in IE在 IE 中通过 DOM 访问框架
【发布时间】:2010-10-02 18:06:12
【问题描述】:

好的,其他所有浏览器都可以使用我目前编写的方法正常工作,但由于某种原因 Internet Explorer 无法正常工作。我在兼容性上花费了数小时(比实际开发该功能更多的时间!)并且快要放弃了!

我有一个论坛,其中一个简洁的功能是 WYSIWYG 编辑器。为此,我基本上有一个 IFrame 作为文档:

<iframe name="writer" src="/scripts/blank.html" class="writer"></iframe>

这是 JavaScript 的当前状态(不断更新):

function initEditor()
{
    w = frames['writer']
    wc = g('writerCopy')

    if(w == null) return

    frames['writer'].document.designMode = 'on'
    frames['writer'].document.body.innerHTML = styleSheet+wc.value
    frames['writer'].focus()
}

它现在部分工作,但在线失败:

frames['writer'].document.body.innerHTML = styleSheet+wc.value

在 Internet Explorer 中,“'frames.writer.document.body' 为 null 或不是对象”。

【问题讨论】:

  • 执行此操作时是否遇到 JavaScript 或 IE 错误,或者只是无法正常工作?
  • 我收到一个无意义的 JavaScript 错误。我会在一分钟后将其添加到帖子中。
  • 你可以通过添加一些关于你所做的事情和你的调试设置的信息来澄清你的问题,以避免多余的问题。您还假设答案必须涉及 try 块,但将其留给回答者或说明原因。
  • 我对其他方法持开放态度(这只是一个建议)。
  • 你为你的框架命名了吗?否则“作家”将是未定义的。再一次,你检查了 IE 是否支持设计模式?我不相信。

标签: javascript html internet-explorer iframe


【解决方案1】:

你激活IE的debuggingfacilities了吗?

【讨论】:

    【解决方案2】:

    也许 iframe 尚未加载。我可以复制您的“'frames.writer.document.body' 为空或不是对象”错误。我在它周围添加了一个 setTimeout,然后它对我有用。

    setTimeout(function () {
        frames['writer'].document.body.innerHTML = "some text";
    }, 200);
    

    【讨论】:

      【解决方案3】:

      显然,IE8 在整个父页面加载完成之前不会使框架元素可用。另请注意,您可以在父页面加载之前写入框架,但这会覆盖框架并阻止它被加载。

      简单的解决方案是将 InitEditor() 调用从主体内部移到此处:

      <body onload="InitEditor()">
      

      【讨论】:

        【解决方案4】:

        最后我使用了 frames['frameName'].document.write('someText') 但前提是其他方法失败。

        【讨论】:

          【解决方案5】:

          您需要将 iframe 指向 IE 的虚拟文档。只需使用以下内容创建一个文件blank.html

          <html><body></body></html>
          

          并设置&lt;iframe src="blank.html" ... &gt;

          然后您可以参考frame.document.body.innerHTML = '...' 来表达您的心意。

          顺便说一句,这是一个糟糕的问题标题。

          【讨论】:

          • 感谢您的想法,但它仍然给出相同的错误。我手动检查 /blank.html 页面是否正常加载,并包含上面的确切代码。
          • 只使用
          【解决方案6】:

          我在这里遗漏了什么吗?你不应该使用类似的东西:

          window.frames[nameOrNumberOfFrame]...
          

          另见MSDN

          此集合仅包含窗口 对象并且不提供访问 对应的frame和iframe 对象。要访问这些对象,请使用 文档的 all 集合 包含对象。

          【讨论】:

          • 我现在正在使用 window.frames。您是否建议我应该使用 all 集合?
          • 我建议你使用微软声明你应该使用的任何东西——毕竟它是他们的浏览器......
          【解决方案7】:

          我什至不确定 IE 是否支持该设计模式。

          而且,.contentDocument 只是 IE8,IE7 和较少使用 .contentWindow.document,但 iframe 窗口是框架集合的一部分。

          试试这个,应该是跨浏览器的:

          <iframe name="writer"></iframe>
          
          frames["writer"].document.body.innerHTML = "some html...";
          

          【讨论】:

          • 已更改,现在效果好多了 - 谢谢!但它仍然失败(如上所述)。
          猜你喜欢
          • 2014-09-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-16
          • 1970-01-01
          • 1970-01-01
          • 2013-02-01
          相关资源
          最近更新 更多