代码之家  ›  专栏  ›  技术社区  ›  psychotik

document.ready何时运行,在处理内联JS时进行WRT?

  •  1
  • psychotik  · 技术社区  · 15 年前

    我有一个页面,在该页面中导入 <head> 第节。 然而,主页面有一些内嵌的javascript。

    在我的一个脚本中导入 <头& 我有 $(document).ready... 它使用一些在页面上内联定义的JS变量。 据我所知,这是我所期望的。-- $(document).ready 使用内联定义的JS变量不会遇到任何错误。

    但是,我从用户那里得到了一些报告,他们在我的代码中看到“未定义”错误。 $(文档)。就绪 在这里,我引用在页面上内联定义的变量。

    我怀疑这是浏览器特有的行为,但我不确定。我没有在文档中明确地找到这个,所以有人能确认在中的页面上使用内联定义的变量是可以的吗? $(文档)。就绪 在JS从 <头& ?

    引用你的消息来源会使你的答案更可信。:)

    谢谢!

    4 回复  |  直到 15 年前
        1
  •  1
  •   Andrew Noyes    15 年前

    $(document).ready() 对不同的浏览器使用不同的方法。没有太多的浏览器同意如何处理这个事件,所以有很多方法可以测试它。我非常肯定jquery实现,至少 IE hack ,取决于插入片段并检查 doScroll("left") 属性,该属性只应在DOM就绪后存在。这是一种未记录的行为,可能会随着新版本的IE而改变。

    目的 $(文档).ready()) 允许您在页面加载完成之前运行依赖于DOM的javascript,因为 window.onload 在加载整个页面之前不会激发。

    不同的实现也具有不同的可靠性级别。听起来好像有一个浏览器在完成加载之前启动了脚本。

    请记住,内联javascript的激发顺序不一定是在 ready . 在我看来,您应该将内联脚本合并到 $(文档).ready()) 回调。jquery做得最好,但并不完美。

        2
  •  6
  •   Gabe    15 年前

    引擎盖下:$(document).ready())

    正如您对JohnResig所期望的那样,jQuery_s方法用于确定何时准备好DOM,它使用各种优化。

    例如,如果浏览器支持domcontentloaded事件(与许多非IE浏览器一样),那么它将触发该事件。但是,IE可以安全地启动,直到文档的readystate达到__complete_,这通常是以后的操作。

    如果这些优化都不可用,window.onload将触发事件

    来源: here

        3
  •  3
  •   Mic    15 年前

    为什么不在启动应用程序的“body”标签的末尾放置一个“script”标签呢?
    通过这样做,您可以确保一切都已就绪,可以启动(跨浏览器和跨库)。

    <html>
      ...
      <script>startApp('param');</script>
    </body>
    </html>
    

    “startapp”是在“head”标记之前的任何位置定义的函数。

        4
  •  1
  •   James Black    15 年前

    在事件触发之前,可能不会处理内联JS,因为不同的浏览器的工作方式不同。您可以假定就绪函数将尽快启动,但不知道它何时启动。

    您不应该假定就绪函数将快速启动,因此您可能需要编写内联逻辑来等待该函数运行。

    在JavaScript中,对事件发生时间的假设进行编码是有风险的,就像假设要使用的属性或函数存在是有风险的一样,因此需要进行非常防御性的编码。

    您可能希望将内联javascript放入函数中,并让它从就绪函数调用,或者至少翻转一些标志,让内联代码知道它现在可以安全运行。

    很有可能,这会使您延迟一点点,但我希望这会带来更好的用户体验。

    推荐文章