2011-03-14 45 views
6

现在我明白了how to access原始HTML + Javascript(通过HTTP GET接收)以及在页面加载完成时自动处理Javascript的呈现结果,我需要了解它是如何完成的:浏览器如何自动将“Page Source”Javascript转换为HTML?

  1. 是否有特定的Javascript功能 ,嵌入在原始HTTP GET resonse,浏览器看起来 了,发现的时候,它只是简单地调用 呢? (换句话说,就是它的 责任 网页程序员的指示浏览 扫描原始内容和 替代所有非交互式 Javascript来HTML?)
  2. 是否浏览器分析整个 页,寻找某些线索,然后 然后决定要转换什么?如果是这样, 这些线索是什么,以及它如何被 完成?

在这个问题上是完全新鲜的,很可能以上都不适用,而且诀窍是以完全不同的方式完成的。如果情况确实如此,您是否会如此友善以引导我如何重新提出问题?

回答

3

HTML规范定义了Javascript运行的环境。一些JavaScript附加到onSOMETHING属性上,并在定义的时间运行。其中一个重要的例子是'onload'。其他Javascript只是在<script>元素的顶层块中。按照规范,浏览器只要按照它的顺序运行即可。

没有“转换”,也没有“替代”。 Javascript是一种编程语言。浏览器运行代码。在某些情况下,代码会与DOM树交互以产生可显示的内容。在其他情况下,它不会(例如通过连接发送信息)。

+0

感谢伟大的答案。可以请为我澄清以下内容吗?我理解HTML/Javascript/DOM的交互部分,即onClick,onMouseOver等。 - 浏览器在生成“呈现的”HTML时会保持完整。但是它如何知道什么*不*完好保留,而是在页面完成时运行它? “什么时候感觉”意味着什么?没有一个标准可以遵循吗?是一类必须自动执行的Javascript函数吗? – PeSmith 2011-03-14 22:56:06

+1

@PeSmith:抱歉抱歉,我不确定我是否回答你的观点,但是所有JavaScript都是“自动执行”的:当浏览器遇到'

1

浏览器解析HTML代码,当遇到包含在适当<script>标记中的JavaScript代码时,它会评估遇到的JavaScript,从而导致用户可见的文档结构和/或内容更改。

0

是否存在一个特定的JavaScript函数,嵌入在原始HTTP GET响应中,浏览器查找,并且在发现时,它只是调用它? (换句话说,网页程序员有责任指示浏览器扫描原始内容并将所有非交互式Javascript替换为HTML?)

没有。见http://dev.opera.com/articles/view/creating-and-modifying-html/

(实际上,你应该在http://dev.opera.com/articles/view/1-introduction-to-the-web-standards-cur/#toc开始)

是否浏览器分析整个页面,寻找某些线索,然后决定转换呢?如果是这样,什么是这些线索

<script>

以及它是如何正在做?

DOM

3

HTML被加载顺序。当发现脚本标记时,浏览器执行脚本。例如:

<div id="test"></div> 
<script type="text/javascript">document.getElementById("test").innerHTML = "Hi there!";</script> 

但是,如果您有以下文件

<script type="text/javascript">document.getElementById("test").innerHTML = "Hi there!";</script> 
<div id="test"></div> 

什么都不会发生,因为在浏览器中执行脚本的时候,浏览器还没有发现,那么测试DIV呢。

1

我冲你最后一个线程。 让我告诉你, 浏览器有一个HTML版本的页面和一个DOM(文档对象模型)版本。 只要Javascript改变了一些东西,就会在DOM中改变它。起初DOM从页面HTML生成,

因此,Javascript不会改变页面源代码。

在这里你的问题是完全无关的,因为浏览器执行此操作加载一个页面:

  1. HTTP请求到收到的数据(可能是一个HTML文档)
  2. 解析接收到的数据(如果是HTML)
  3. 寻找在分析数据的其他资源(链接到其他的JavaScript,CSS,图像等)
  4. 下载剩余的资源(循环回到步骤2)
  5. 生成DOM,运行CSS和脚本,显示图像。

浏览器开始运行接收到的数据从顶部到底部的所有javascript。您还可以将JavaScript函数分配给页面上的元素事件,以便在事件触发时自动调用指定的javascript函数。

解析HTML并运行其JavaScript与HTTP协议无关,只能在自己的计算机上完成(在您的磁盘上打开HTML文件)。

+1

这不是我的领域,但我认为JavaScript在HTML解析阶段运行 - 在脚本运行时HTML解析暂停。这是因为JavaScript包含'document.write',它将HTML内容写入DOM。然后,我不知道浏览器是否会停止解析HTML,或者您的描述是否与他们实际做的更接近。 – 2011-03-14 22:47:03

+2

@Paul - 我的理解是,解析器传统上会停止解析,因为您可以执行像document.write('<! - ')'这将从根本上改变剩余的DOM看起来像什么。从理论上讲,解析器可以为DOM状态添加书签,*暂时*预读解析,如果在脚本中遇到document.write,则返回跟踪。鉴于在HTML5中引入'async'属性,我猜测浏览器不这样做。 – Alohci 2011-03-15 00:33:49

3

当Web浏览器解析HTML页面时,如果遇到<script>元素,它将停止解析HTML,并立即在*中(或链接到)<script>元素运行JavaScript。

JavaScript代码可以修改页面的DOM(文档对象模型 - JavaScript可以访问的HTML的程序化表示形式),从而更改浏览器显示的呈现HTML。 (它也可以将函数分配给DOM节点上的内置事件处理程序,以便可以运行某些JavaScript,例如,当用户单击链接或文档加载完成时。)

因此它确实完全网页程序员有责任做到这一点。浏览器不会猜测如何处理下载的JavaScript。他们跑步并服从它。

(*这是一个有点简单化:在defer属性可以防止脚本被立即执行。)

+1

在这个级别上它并不重要,但是当分析器遇到''标签时脚本执行会更准确些。如果通过在分析器输入流中注入字符来考虑document.write的工作方式,这是有道理的。 – Alohci 2011-03-15 00:19:41

+0

@Alohci:啊,是的,我明白你的观点。我会把“

  • 11. 为什么浏览器“Firefox Page Source”显示两个关闭</body>标签?
  • 12. 如何将HTML代码转换为Javascript?
  • 13. 如何将JavaScript响应转换为HTML
  • 14. 如何将UTC转换为浏览器区域使用Angular2
  • 15. 如何将UTC时间转换为浏览器本地时区?
  • 16. 如何将curl请求转换为浏览器URL
  • 17. 如何将音频文件(即时)转换为浏览器?
  • 18. 转换JavaScript的IE浏览器
  • 19. 如何将日期时间转换为Javascript中浏览器的设置?
  • 20. 将GWT网页游戏转换为支持移动浏览器
  • 21. 将Html转换为document.write javascript
  • 22. 将HTML + JavaScript转换为exe
  • 23. Selenium IDE - 自动将html转换为junit
  • 24. 浏览器转换单引号(')转换成“S和忽略‘\’S,HTML /使用Javascript
  • 25. Javascript自动将UTF转换为ISO-8859
  • 26. javascript自动打印谷歌浏览器
  • 27. 如何防止浏览器自动滚动重新加载JavaScript?
  • 28. 如何在浏览器加载时自动启动iMacros Javascript
  • 29. Css转换IE浏览器
  • 30. 如何将自制的c#web浏览器设置为默认浏览器?