原文章:https://www.w3cmm.com/dom/insert-javascript.html

动态脚本指的是在页面加载时不存在,但将来的某一时刻通过修改该DOM动态添加的脚本。和操作HTML元素一样,创建动态脚本也有两种方式:插入外部文件和直接插入JavaScript代码。

动态加载外的外部JavaScript文件能够立即运行,比如下面的<script>元素。

  1. <script type="text/javascript" src="client.js"></script>

而创建这个节点的DOM代码如下所示:

  1. var script = document.createElement("script");
  2. script.type = "text/javascript";
  3. script.src = "client.js";
  4. document.body.appendChild(script);

显然这里的DOM如实的反映了相应的HTML代码。不过执行最后一行代码把<script>元素添加到页面之前,是不会下载外部文件的。也可以把这个元素添加到<head>元素中效果相同。整个过程可以使用下面的函数来封装:

  1. function loadscript(url) {
  2.     var script = document.createElement("script");
  3.     var script.type = "text/javacript";
  4.     script.src = url;
  5.     document.body.appendChild(script);
  6. }

然后,就可以通过调用这个函数来加载外部的JavaScript文件了:

  1. loadScript("client.js");

加载完成后,就可以在页面中的其它地方使用这个脚本了。

另一种指定JavaScript代码的方式是行内方式,如下面的例子所示:

  1. <script type="text/javascript">
  2. function sayHi() {
  3.     alert("hi");
  4. }
  5. </script>

从逻辑上讲,下面的DOM代码是有效的:

  1. var script = document.createElement("script");
  2. script.type = "text/javascript";
  3. script.appendChild(document.createTextNode("function sayHi() {alert('hi');}"));
  4. document.body.appendChild(script);

在Firefox、Safari、Chrome和Opera中,这些DOM代码可以正常运行。但在IE中,则会导致错误。IE将<script>视为一个特殊的元素,不允许DOM访问其子节点。不过,可以使用

<script>元素的text属性来指定JavaScript代码,想下面的例子这样:

  1. var script = document.creatElement("script");
  2. script.type = "text/javascript";
  3. script.text = "function sayHi() {alert('hi');}";
  4. document.body.appendChild(script);

经过修改之后的代码可以在IE、Firefox、Opera和Safari3.0中运行。Safari3.0之前的版本虽然不能正确的支持text属性,但却允许使用文本节点技术来指定代码。如果需要兼容早期版本的Safari,可以使用下列代码:

  1. var script = document.createElement("script");
  2. script.type = "type/javascript";
  3. var code = "function sayHi() {alert('hi');}";
  4. try {
  5.     script.appendChild(document.createTextNode(code));
  6. } catch (ex) {
  7.     script.text = code;
  8. }
  9. document.body.appendChild(script)

这里首先尝试标准的DOM文本节点方法,因为除了IE(在IE中会导致抛出错误),所有的浏览器都支持之中方式。如果这行代码抛出了错误,那么说明是IE,于是就必须使用text属性了,整个过程可以用以下函数来表示:

  1. function loadScriptString(code) {
  2.     var script = document.createElement("script");
  3.     script.type = "text/javascript";
  4.     try {
  5.         script.appendChild(document.createTextNode(code));
  6.     } catch (ex) {
  7.         script.text = code;
  8.     }
  9.     document.body.appendChild(script);
  10. }
  11. loadScriptString("function sayHi() {alert('hi');}");;

js插入动态脚本的更多相关文章

  1. 【前端基础】动态脚本与JSONP

    博主入职两个月了,越来越感受到打好基础对于前端工程师的重要性,在向着狂拽酷炫的框架&构建工具高速狂奔之前,必须有一个坚实的基础打底,才不至于轻易翻车.所以博主最近一直在恶补<JS高级程序 ...

  2. js实现动态加载脚本的方法实例汇总

      本文实例讲述了js实现动态加载脚本的方法.分享给大家供大家参考,具体如下: 最近公司的前端地图产品需要做一下模块划分,希望用户用到哪一块的功能再加载哪一块的模块,这样可以提高用户体验. 所以到处查 ...

  3. 无阻塞加载外部js(动态脚本元素,XMLHttpRequest注入,LazyLoad)

    动态脚本元素即在js中去创建<script>标签加载外部js并执行,这样加载的好处是文件的下载和执行过程不会阻塞页面的其他进程.通过下面两个例子对比出效果 <!DOCTYPE htm ...

  4. DOM动态脚本和动态样式

    动态脚本 [定义] 在页面加载时不存在,但将来的某一时刻通过修改DOM动态添加的脚本. [方式] [1]插入外部文件方式 var script = document.createElement(&qu ...

  5. Javascript高级编程学习笔记(43)—— 动态脚本

    动态脚本 大多数情况下,DOM操作都很简洁明了 因为DOM主要就是用来操作页面中的可视节点的 但有些时候我们又希望可以动态的来进行DOM操作 其中的一部分也就是今天我们的内容动态脚本 动态脚本是什么意 ...

  6. 病毒木马查杀实战第025篇:JS下载者脚本木马的分析与防御

    前言 这次我与大家分享的是我所总结的关于JS下载者脚本木马的分析与防御技术.之所以要选择这样的一个题目,是因为在日常的病毒分析工作中,每天都会遇到这类病毒样本,少则几个,多则几十个(当然了,更多的样本 ...

  7. 使用 SWFObject.js 插入Flash

    今天学习了一下使用 SWFObject.js 这个js插入flash. 下载地址:http://code.google.com/p/swfobject/ 这个js的好处 1.IE中没有讨厌的虚框问题了 ...

  8. 初探JavaScript(二)——JS如何动态操控HTML

    除去五一三天,我已经和<JavaScript Dom编程艺术>磨合了六天,第一印象很好.慢慢的,我发现这是一块排骨,除了肉还有骨头.遇到不解的地方就会多看几遍,实在不懂的先跳过,毕竟,初次 ...

  9. js的动态加载、缓存、更新以及复用(四)

    本来想一气呵成,把加载的过程都写了,但是卡着呢,所以只好在分成两份了. 1.页面里使用<script>来加载 boot.js . 2.然后在boot.js里面动态加载 bootLoad.j ...

随机推荐

  1. Kafka - protocol

    http://kafka.apache.org/protocol   具体的协议看原文,   Preliminaries Network Kafka uses a binary protocol ov ...

  2. Linux内核设计第八周 ——进程的切换和系统的一般执行过程

    Linux内核设计第八周 ——进程的切换和系统的一般执行过程 第一部分 知识点总结 第二部分 实验部分 1.配置实验环境,确保menu内核可以正常启动 2.进入gdb调试,在shedule和conte ...

  3. prototype

  4. 解决windows 10关机自动重启的问题

    自从windows 10推出来没多久,就给台式机安装了.可是,有点悲剧的是:每次关机,都会自动重启(restart). 之后也在网上找了一些解决方式,但还是没用.前天通过搜索”Windows 10 c ...

  5. App Store有哪些原因会影响app应用上架呢?(分享)

    App Store对于应用上架的审核是非常严格的,很可能一个没有注意到的细节,或者一个你根本没想想到的原因就会导致你的应用上架失败.而排除这些无可避免的错误以外,还有一些导致应用上架失败的原因,非常常 ...

  6. Unity 对象查找

    GameObject.Find() 对象名 可查找带不带脚本,不能查隐藏,有可能不是要找的对象 GameObject.Find() 目录结构 可查找带不带脚本,能查隐藏,能确定是要找的对象 trans ...

  7. gulp详细入门教程(转载)

    本文转载自: gulp详细入门教程

  8. 用mysql++读写二进制

    方法1: // mysqlTest.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include <mysql++.h> #inc ...

  9. 一个Json结构对比的Python小工具兼谈编程求解问题

    先上代码. jsondiff.py #!/usr/bin/python #_*_encoding:utf-8_*_ import argparse import json import sys rel ...

  10. python-操作excel数据文件

    1.excel文件操作 读文件xlrd模块: