How to Auto Include a Javascript File

2016-02-19 10:49 6 1 收藏

在这个颜值当道,屌丝闪边的时代,拼不过颜值拼内涵,只有知识丰富才能提升一个人的内在气质和修养,所谓人丑就要多学习,今天图老师给大家分享How to Auto Include a Javascript File,希望可以对大家能有小小的帮助。

【 tulaoshi.com - Web开发 】

Form: http://www.webreference.com/programming/javascript/mk/
Author:Mark Kahn

Many developers have a large library of JavaScript code at their fingertips that they developed, their collegues developed, or that they've pieced together from scripts all over the Internet. Have you ever thought that it would be nice to not have to search through all those files just to find that one function? This article will show you how dynamically include any JavaScript file, at runtime, by simply calling a function in that file!

Here's an example: You have a function foo() in file bar.js. In your code, you know that foo() might be called, but it probably won't be because most people do not use its functionality. You don't want to force the user to download bar.js unless it's going to be used because it's a fairly large file. Here you'll learn how to make a fake foo() function that actually loads bar.js on the fly and then calls the real foo() function.

Dynamically Loading a Script
As many developers know, there are at least two different ways to dynamically load a script at runtime. The first is to create a script object and append it to the document. The second is to use an XMLHTTP request to grab the source code, and then eval() it. 

It is this second method that we're going to use, and we're going to exploit the fact that an XMLHTTP request has the capability to completely stall any script activity. 

First, some basics: how to create an XMLHTTP Object. There are as many different functions to return a cross-browser XMLHTTP Object as there are developers that work with AJAX. I happen to have my own as well, and here's a simplified example of that: 

代码如下:

function getXMLHttpObj(){ 
  if(typeof(XMLHttpRequest)!='undefined') 
    return new XMLHttpRequest(); 

  var axO=['Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.4.0', 
    'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP'], i; 
  for(i=0;iaxO.length;i++) 
    try{ 
      return new ActiveXObject(axO[i]); 
    }catch(e){} 
  return null; 


Most browsers other than Internet Explorer 5 or 6 have a built-in XMLHttpRequest object. Internet Explorer 7, when it's released, will also have this object natively. The first thing we do is check to see if this object exists. If it does, we create an instance of it and that's it. If the object doesn't exist, we attempt to create one of several ActiveX Objects. We don't know what objects our users have installed, so we attempt to create several different XMLHTTP objects, starting with the newest ones. 

Now in order to dynamically load functions, we first need to define them. We could do this one function at a time, but instead of hard-coding dozens of functions, we can choose to just make an object or array with all the file names and the functions you want to have auto-included: 

代码如下:

var autoIncludeFunctions = { 
  'scripts/file1.js': ['function1', 'function2', 'function3'], 
  'scripts/file2.js': ['function4', 'function5', 'function6'], 
  'scripts/file3.js': ['function7', 'function8', 'function9'] 



Our autoIncludeFunctions object should contain a list of JavaScript files, as well as a list of functions in those files. Here we are using shorthand JavaScript notation to create both the object and the arrays, but the same thing could be accomplished in many different ways. 

These .js files can contain any code you have available, such as JavaScript menus, animations, etc. The simplest example would be a file titled "file1.js" that only contained "function function1(){ alert('Hello, World!'); }".

Note that if any of these files contain functions with the same name as another file, only the last function listed will be used. 

To make things a bit easier, we're going to make a function that will pull a JavaScript file down and execute it. It's very important, in our case, that the third paramater sent to the XMLHTTP object be false. This forces the script to wait for the response to download as opposed to continuing on with other code. 

代码如下:

function loadScript(scriptpath, functions){ 
  var oXML = getXMLHttpObj(); 
  oXML.open('GET', scriptpath, false); 
  oXML.send(''); 
  eval(oXML.responseText); 
  for(var i=0; ifunctions.length; i++) 
    window[functions[i]] = eval(functions[i]); 

The loadScript function expects two arguments: scriptpath and functions. "scriptpath" should contain the URL to your JavaScript file, and "functions" is the array of functions that exist in this JavaScript file.

As you can see, the code to pull and execute a script is straightforward. The browser first downloads, and then interprets the JavaScript file. If you've read any other articles on AJAX development, you might remember that in most cases the third argument sent to the open() function of an XMLHTTP object is usually "true." In our case we have it set to "false." This argument controls the state of the XMLHTTP object. If set to true, the object runs asynchrounously, meaning that all other JavaScript code continues while the object is loading. While this is a good thing in many circumstances, if we implemented it here our code would return before our file was done loading. Since we want our code to wait until this file is complete, we set this third argument to false, thus pausing our JavaScript execution until we are ready to continue. 

When the code is evaluated from the responseText, it's executed in the limited scope of the loadScript function and because of this, none of these functions will be available outside of the loadScript function. In order do get around this, the for loop adds each function to the window object, thus making it globally available. 

It's important to note that only scripts on the same server as the current page can be called in this manner. This is inherent to the XMLHTTP Object and is a necessary measure to increase general browser security. 

来源:https://www.tulaoshi.com/n/20160219/1595874.html

延伸阅读
标签: Web开发
Demonstration script that displays a File Open dialog box (open to the folder C:\Scripts), and then echoes back the name of the selected file.  Supported Platforms Windows Server 2003...
FreeBSD4.8 IPFW How to 测试机IP为211.162.77.73 网卡为:xl0 内核中加了流量管理,你可以根据实际需要增删。 uname -a 如果你用的是默认内核GENERIC则如下操作: ============================================= cd /sys/i386/conf cp GENERIC ./GENERIC_IPFW --------------------------------- ee GENERIC_IPFW 添加以下内容 options IPFIR...
标签: PHP
php的require()性能与include()相类似。不同之处在于,对include()来说,在include()执行时文件每次都要进行读取和评估;而对于require()来说,文件只处理一次(实际上,文件内容替换了require()语句)。这就意味着如果有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高。另一方面,如果每次执行代码时相...
private void sendmail_jmail() {//使用jmail进行邮件发送;需要添加引用jmail.dll //jmail.SMTPMailClass mail = new jmail.SMTPMailClass(); jmail.MessageClass msg = new jmail.MessageClass(); msg.From = this.tb_from.Text.Trim(); msg.AddRecipient(this.tb_to.Text.Trim()," Gallon来信",""); msg.Body= this.tb_mailBody.Text...
Auto CAD制作弯管 现看效果图: 制作步骤如下: 图1 图2 图3 原文地址:http://soft.zol.com.cn/55/553390.html 提示:试试← →可以实现快速翻页 图4 图5 图6 图7 AutoCAD显示驱动程序文件(.hdi)已丢失怎么办?   故障分www.t...

经验教程

405

收藏

42

精华推荐

关于#include的补充说明

关于#include的补充说明

更止女人痛

php 中include()与require()的对比

php 中include()与require()的对比

魅力男人在

user itext create a word file

user itext create a word file

六块砖ok

微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部