65.9K
CodeProject 正在变化。 阅读更多。
Home

如何在运行时将 JavaScript 和 CSS 文件添加到网页

starIconstarIconstarIconstarIconstarIcon

5.00/5 (3投票s)

2013年5月10日

CPOL

4分钟阅读

viewsIcon

55391

如何在运行时将 JavaScript 和 CSS 文件添加到网页。

介绍  

如果您真的想让您的网站加载更快,并且想在 y-slow 等工具中获得良好的网站排名,请查看以下流程。这些概念是我自己开发的,并且我也以各种方式进行了验证,我还将提供示例代码进行测试。如果您正在做某些事情,请暂停 10 分钟,阅读以下步骤,这将使任何网站更快,并提供良好的 y-slow 排名。

如果您真的考虑到网站的加载时间,我们只需要应用程序的 20% 到 30% 或最多 40% 的 JavaScript,而其余 60% 到 70% 的 JavaScript 我们在页面加载时毫无理由地加载了。CSS 文件也是如此...... 但是,如果我们实现一个概念,即我们可以在页面加载时加载所需的 JavaScript 和 CSS,并在以后需要时添加其余的 JavaScript 或 CSS 文件 - 那么我们将实现我们的目标。

如何做到这一点

  • 首先:我们必须根据不同的功能将 JavaScript 和 CSS 文件拆分为多个文件。
  • 第二:仅将所需的 JavaScript 和 CSS 文件添加到您的网页
  • 第三:在页面加载后,在运行时添加所需的 JavaScript 和 CSS 文件。

使用代码

动态添加 JavaScript 文件

var path    = "scriptFolder"
var script  = document.createElement( 'script' );
script.src  = path + '/jsFile.js';
document.getElementsByTagName( 'head' )[0].appendChild( script );

动态添加 CSS 文件

var path   = "css";
var style   = document.createElement( 'link' );
style.rel   = 'stylesheet';
style.type  = 'text/css';
style.href  = path + '/style.css';
document.getElementsByTagName( 'head' )[0].appendChild( style );

示例

这是一个简单的例子和一些步骤来描述整个功能。

<div><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
  "<a href="http://www.w3.org/TR/html4/loose.dtd">
  http://www.w3.org/TR/html4/loose.dtd</a>">
<html>
<head>
<title>Demo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script src="javascripts/main.js"></script>
</head>
<body>
 <input type="button" name="check1" id="check1" 
     value="box1" onClick="showbox('box1')">
 <input type="button" name="check2" 
   id="check2" value="box2"  onClick="showbox('box2')">
 
 <div style="display:none;" id="box1">
  <input type="button" onClick="function1()" 
    value="Box1 function1() call in (js1.js) file">
 </div>
 <div style="display:none;" id="box2">
  <input type="button" onClick="function2()" 
    value="Box2 function2() call in (js2.js) file">
 </div>
</body>
</html></div>

这里我使用了两个按钮(name="check1" & name="check2")和两个隐藏的 div(id="box1" & id="box2"),点击按钮会隐藏一个 div 并打开一个 div,这些 div 在 *style.css* 文件中定义了一些类,每个 div 都有一个按钮,并且有一个 onclick 事件,我们将其保存在 js1.js 和 js2.js 文件中 - 如果你稍微思考一下,我们不需要在加载时加载 js1.js 和 js2.js 文件,如果你看到该页面,我们只需要在页面加载时调用 showbox (boxid) 的 JavaScript onclick 函数。

Main.js

var is_js1 = 0;
var is_js2 = 0;
var is_css1 = 0;
function showbox(id)
{
 if(id == 'box1')
 {
  
  //adding css
  if(is_css1 == 0)
  {
   var path  = "css";
   var style   = document.createElement( 'link' );
   style.rel   = 'stylesheet';
   style.type   = 'text/css';
   style.href   = path + '/style.css';
   document.getElementsByTagName( 'head' )[0].appendChild( style );
   is_css1 = 1;
  }   
  document.getElementById('box2').style.display='none';
  document.getElementById('box1').style.display='block';
  
  /***********Add JS**********/
  if(is_js1 == 0)
  {
   var path   = "javascripts"
   var script   = document.createElement( 'script' );
   //style.rel   = 'stylesheet';
   //style.type   = 'text/css';
   script.src   = path + '/js1.js';
   //style.media  = 'screen';
   document.getElementsByTagName( 'head' )[0].appendChild( script );
   is_js1 = 1;
  }     
 }
 else
 {
  //adding css
  if(is_css1 == 0)
  {
   var path  = "css";
   var style   = document.createElement( 'link' );
   style.rel   = 'stylesheet';
   style.type   = 'text/css';
   style.href   = path + '/style.css';
   document.getElementsByTagName( 'head' )[0].appendChild( style );
   is_css1 = 1;
  }   
  document.getElementById('box2').style.display='block';
  document.getElementById('box1').style.display='none';
  /***********Add JS**********/
  if(is_js2 == 0)
  {
   var path   = "javascripts"
   var script   = document.createElement( 'script' );
   //style.rel   = 'stylesheet';
   //style.type   = 'text/css';
   script.src   = path + '/js2.js';
   //style.media  = 'screen';
   document.getElementsByTagName( 'head' )[0].appendChild( script );
   is_js2 = 1;
  }    
 }
}

在页面加载时,我们需要这个函数,在这里我们正在隐藏和显示 div,但在这里我们也添加了 CSS 和 JavaScript 文件。我使用了 3 个全局变量来检查是否已经添加了文件,如果已添加,它将不会再次将这些文件添加到网页。

function function1()
{
  alert("box1 function");
}

这是 js 文件,其中包含 Demo.html<input type="button" onClick="function2()" value="Box2 function2() call in (js2.js) file"> 的函数。

在 CSS 文件中

.myclass
{
border:2px solid #CC6600;width:400px; height:40px;
}
.myclass2
{
 width:400px; height:40px; border:3px solid green;
}

在此文件中,我们保留 index.html 的 box1 和 box2 的类。

另一种异步加载 JavaScript 的方法

通常,我们会通过在 head 元素中添加一个 script 标签来将脚本文件添加到 .aspx 页面中,例如:<script  type="text/javascript" src="script/TestScript.js"></script>

这种方法有一个缺陷。加载脚本文件会阻止页面的渲染。(您可以在低带宽网络或 JavaScript 文件太大时注意到这一点)。为了避免这个问题,经验丰富的程序员建议在 html 文档的末尾加载脚本。

但让我们探索一些更好的方法将 JavaScript 加载到页面上


1. 使用 DEFER:您可以在 script 元素中使用 'defer' 来延迟脚本块的执行。 虽然这是 HTML 4 规范的一部分,但只有 IE4+ 正确支持它。 示例:<script defer="defer" type="text/javascript" src="script/TestScript.js">

2. 使用 AJAX:您可以使用它来动态获取 Javascript 文件并使用它。 步骤

  1. 创建一个 XMLHTTpRequest 对象
  2. 使用 AJAX 获取 JavaScript 文件
  3. EVAL() 结果

例如。

// Create the XMLHttpRequest object
// This varies form browser to browser, so I leave it to you
 var ajaxObj = GetXHRObject();

// As usual set a call back handler and use eval() the result
ajaxObj.onreadystatechange = function() {
if (ajaxObj.readyState != 4 ) return;
    eval(ajaxObj.responseText);
};

ajaxObj.open('GET', 'script/TestScript.js', true);
ajaxObj .send('');

3. 使用 document.Write() 你可以在 head 元素中写入一个脚本 -

document.write("<script type="text/javascript" src="text/javascript">" + 
  "</script><span style="font-family: Courier New;"><script type='text/javascript' 
  src='text/javascript'>" + "</script></span>");

4. 使用 script DOM 元素:步骤
1. 创建一个 script 元素(类型为 script)
    var scriptElement = document.createElement('script');

2. 设置新创建元素的类型
    scriptElement.type = "text/javascript";

3. 设置元素的 src 属性
             scriptElement.src = "script/TestScript.js";

4. 获取 head 元素并将 script 元素注入其中
         var headElement = document.getElementsByTagName('head')[0];
         headElement.appendChild(scriptElement);

放在一起

<head runat="server">  
 <script type="text/javascript">
     var scriptElement = document.createElement('script');
     scriptElement.type = "text/javascript";
     scriptElement.src = "script/TestScript.js";
     document.getElementsByTagName('head')[0].appendChild(scriptElement);
 </script>
</head>

结论

请在本地创建这些文件或加载现有文件并打开您的 firebug - 打开 head 标签,您可以看到只有 main.js 被添加了,现在点击第一个按钮,您可以看到 js1.js 和 style.css 已添加到您的 head 标签中,它打开 div 并且 div 具有 CSS 类属性,通过点击 box1 按钮它会弹出 alert("box1 function"); 当您单击 box2 按钮时重复该过程。 谢谢。

© . All rights reserved.