一、在HTML中嵌入Javasript的方法

1.直接在Javascript代码放在标记对之间

2.由标记的src属性制定外部的js文件

3.放在事件处理程序中,比如:

点击我

4.作为URL的主体,这个URL使用特殊的Javascript:协议,比如:点击我

5.利用javascript本身的document.write()方法写入新的javascript代码

6.利用Ajax异步获取javascript代码,然后执行

第3种和第4种方法写入的Javascript需要触发才能执行,所以除非特别设置,否则页面加载时不会执行。

二、Javascript在页面的执行顺序

1.页面上的Javascript代码是HTML文档的一部分,所以Javascript在页面装载时执行的顺序就是其引入标记的出现顺序, 标记里面的或者通过src引入的外部JS,都是按照其语句出现的顺序执行,而且执行过程是文档装载的一部分。

2.每个脚本定义的全局变量和函数,都可以被后面执行的脚本所调用。

3.变量的调用,必须是前面已经声明,否则获取的变量值是undefined。

4.同一段脚本,函数定义可以出现在函数调用的后面,但是如果是分别在两段代码,且函数调用在第一段代码中,则会报函数未定义错误。

5.document.write()会把输出写入到脚本文档所在的位置,浏览器解析完documemt.write()所在文档内容后,继续解析document.write()输出的内容,然后在继续解析HTML文档。

test.js的内容是:

var tmpStr = 1;

alert(tmpStr);

•在Firefox和Opera中的弹出值的顺序是:1、2、我是1、3

•在IE中弹出值的顺序是:2、1、3,同时浏览器报错:tmpStr未定义

原因可能是IE在document.write时,并未等待加载SRC中的Javascript代码完毕后,才执行下一行,所以导致2先弹出,并且执行到document.write(‘document.write("我是" + tmpStr)')调用tmpStr时,tmpStr并未定义,从而报错。

解决这个问题,可以利用HTML解析是解析完一个HTML标签,再执行下一个的原理,把代码拆分来实现:

这样IE下和其他浏览器输出值的顺序都是一直的了:1、2、我是1、3。

三、如何改变Javascript在页面的执行顺序

1.利用onload

输出值顺序是 2、1。

需要注意的是,如果存在多个winodws.onload的话,只有最有一个生效,解决这个办法是:

window.onload = function(){f();f1();f2();.....}

利用2级DOM事件类型

if(document.addEventListener){

window.addEventListener('load',f,false);

window.addEventListener('load',f1,false);

...

}else{

window.attachEvent('onload',f);

window.attachEvent('onload',f1);

...

}

2.IE中可以利用defer,defer作用是把代码加载下来,并不立即执行,等文档装载完毕之后再执行,有点类似window.onload,但是没有window.onload那样的局限性,可以重复使用,但是只在IE中有效,所以上面的例子可以修改成为

这样IE就不报错了,输出值的顺序变成:1、3、2、我是1

当HTML解析器遇到一个脚本,它必须按常规终止对文档的解析并等待脚本执行。为了解决这个问题HTML4标准定义了defer。通过defer来提示浏览器可以继续解析HTML文档,并延迟执行脚本。这种延迟在脚本从外部文件载入时非常有用,让浏览器不必等待外部文件全部载入之后才继续执行,能有效的提高性能。IE是目前唯一支持defer属性的浏览器,但IE并没有正确的实现了defer属性,因为延迟的脚本总是被延迟,直到文档结束,而不是只延迟到下一个非延迟的脚本。这意味着,IE中延迟的脚本的执行顺序相当混乱,并且不能定义任何后面非延迟脚本并须的函数和变量。在IE中所有的defer的脚本执行时间应该都是HTML文档树建立以后,window.onload之前。

3.利用Ajax。

因为xmlhttpRequest能判断外部文档加载的状态,所以能够改变代码的加载顺序

html js页面加载前执行,Javascript代码在页面加载时的执行顺序介绍相关推荐

  1. 收藏夹也能执行javascript代码

    如何让收藏夹(书签栏)执行javascript代码 HTML页面在浏览器中可以运行是总所周知的,但是你肯定不知道浏览器书签栏也是可以执行javascript代码的. 1.首先创建这么一个index.h ...

  2. js如何运行python代码_python中执行javascript代码

    python中执行javascript代码: 1.安装相应的库,我使用的是PyV8 2.import PyV8 ctxt = PyV8.JSContext() ctxt.enter() func = ...

  3. 从父页面在iframe中调用JavaScript代码

    基本上,我将iframe嵌入到页面中,并且iframe具有一些我需要从父页面调用的JavaScript例程. 现在相反非常简单,因为您只需要调用parent.functionName() ,但是不幸的 ...

  4. 【Java脚本引擎】脚本引擎执行JavaScript代码

    应用场景 公司有30员工,每个人工资计算方式不同.现在需要计算工资. 传统的方法:一个接口,30个实现类. 使用脚本引擎:编写一个xml文件,每人一个计算公式,使用的时候可以把公式加载到程序中,启动时 ...

  5. [js] 在不支持js的浏览器中如何隐藏JavaScript代码?

    [js] 在不支持js的浏览器中如何隐藏JavaScript代码? 在<script>标签之后的代码中添加"<!-– ",不带引号. 在</script&g ...

  6. Java动态性(3) - 脚本引擎执行javascript代码

    1.脚本引擎执行JavaScript代码 脚本引擎介绍 使得Java应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在Java平台上调用各种脚本语言的目的 Java脚本API是连通Java平 ...

  7. 【java神操作】java竟然还可以能执行Javascript代码!!

    引入:闲着没事想研究下学校查成绩的接口,然后自己写程序查.但是查成绩首先必须登录,所以必须先研究学校网站的登录接口,抓包后发现传到后台的学号密码是经过加密的,研究其加密方法成为必经之路 发现学校网站改 ...

  8. 如何在 Chrome 中执行 JavaScript 代码

    前言 要在浏览器中执行 JavaScript 脚本,首先你的浏览器得支持.现在主流推荐 Chrome 浏览器,也可以使用基于 Chromium的 Edge 浏览器.下面来介绍如何在 Chrome 中打 ...

  9. java执行JavaScript代码

    java执行JavaScript代码的方式有很多,这里讲一下使用 Mozilla 公司开发的 Rhino 实现的,该实现从 1.6开始集成到 jdk里面. 1,对象相互转化 // 获取引擎对象    ...

最新文章

  1. Java Pinyin4j(汉字转拼音)
  2. LeetCode 1901. 找出顶峰元素 II(二分查找)
  3. Golang连接池的几种实现案例
  4. Flink批处理练习
  5. 服务器关机显示正在停止服务,云服务器一直停止中
  6. JavaScript回顾与学习——运算符
  7. 手机访问电脑虚拟服务器,User Agent Switcher插件使用教程【电脑模拟手机访问网站】...
  8. oracle hcm cloud价格,Oracle HCM
  9. struct Lnode *next
  10. coon.php连接,PHP 连接 MySQL
  11. 基于抛物线过渡(梯形加减速)的空间直线插补算法与空间圆弧插补算法(Matlab)
  12. 使用 ffmpeg 转码 视频 (使用 nvidia 硬件加速 和 h265 编码)
  13. iOS 自定义转场动画
  14. 计算机科学速成课 Crash Course Computer Science 笔记(摘要形式)
  15. MCAL中DIO的配置
  16. 关于51地图中循环根据经纬度获取地理位置只显示一条数据的问题
  17. 17.2.3 通过查看triggers数据表中的数据查看触发器的信息
  18. 访问服务器上视频的文件,服务器上的视频文件
  19. MEMS硅麦和ECM驻极体麦
  20. 在线考试系统html页面结果,Node.js在线考试系统——页面布局(学生)

热门文章

  1. HackTheBox::Optimum
  2. DAY SIX -- ospf的不规则区域问题和链路状态通告LSA
  3. 跟叶子学把妹——教程序猿把妹第二集
  4. C2C平台如何才能更吸引人
  5. 《有限与无限的游戏》
  6. pandas处理数据最多是M级?还是G?还是亿?极限数量是多少呢?
  7. 万万没想到!我拒绝了一位知名VC大佬的创业合伙人邀请
  8. for 循环练习题(2)
  9. 安装完Ubuntu16.04后要做的事
  10. 用C语言编写一个申请内存的程序