2009-10-25 146 views
0

我有一个网站,有数百个已经部署的html页面。现在我想添加事件监听器,如onload和onunload在所有的HTML页面。我不想手动更改它们中的每一个,所以我在考虑是否可以动态添加这些侦听器。我的想法是编写查找body的DOM节点并将侦听器添加到此节点的JavaScript代码。可能吗? (它不一定是跨浏览器的解决方案,代码将在Firefox上运行。)动态添加事件侦听器

谢谢! 保罗

回答

3

如果你想添加JavaScript,你最终会需要修改站点。

也许你会做一个全局搜索和替换,查找:

</head> 

而在你的站点的根目录将其更改为

<script type="text/javascript" src="/global.js"></script> 
</head> 

然后创建一个名为全局文件。 js并把它放在它:

window.onload = function() { 
    // onload code here 
} 

window.onunload = function() { 
    // onunload code here 
} 

你想做什么样的事情?如果您添加了很多事件处理程序,那么对于jQuery或其他库的建议是一个很好的建议,但如果您只需要添加几块JS,也许库就是过度杀伤性的。

+0

+1 for

+0

Thanks Artlung。我只需要添加几个听众,你的建议可以帮助所有人! – Paul

+0

是的,我认为window.onload和window.onunload可以完成这项工作。 – SHA2NK

2

是的,很容易..但你打算如何获得在那里的JavaScript?如果你已经装载,可让您在你的方法挂钩的所有页面的单个JavaScript库,你可以使用

window.onload = function() {}; 

window.onunload = function() {}; 

..但如果你有选择,我'严重的建议使用像jQuery这样的库来隐藏你的所有这些垃圾。


Paul要求澄清。下面是示例代码:

var hi = function() { 
    alert('hi there.'); 
}; 

var bye = function() { 
    alert('bye!'); 
}; 

if(window.addEventListener) { 
    window.addEventListener('load', hi, false); 
    window.addEventListener('unload', bye, false); 
} else if(window.attachEvent) { 
    window.attachEvent('load', hi); 
    window.attachEvent('unload', bye); 
} 
+0

感谢您的答复!你能否在函数内部建议一些细节(){}?我真的很新的JavaScript ... – Paul

+0

@ paul ummm ...你应该把你的*代码*在那里。是的,*您的代码*。 – aviraldg

+0

我不知道API,那是我的问题......呃......也许我还没有熟悉这里的规则......对不起。 – Paul

0

这有2个解决方案:

  1. 您可以使用jQuery ready事件
  2. 或者您可以使用在window.onload
+0

$ .ready =! onload导致它在onload之前被触发。顺便说一句,还有一种方法:window.addEventListener()。 –

0

嗯,你可以做这四件事情之一:

  • 使用如PHP,Python或ASP.Net一些脚本语言来构建一个前端到这些网页,这在所需的代码
  • 等工具grepsed增加做了更换,所有
  • 负荷提到的网页框架,从中央“主页”,并使用DOM操作来将所述事件侦听器(虽然我相信这不会对body.onLoad是可能的)
  • 如果所有的网页加载已经有些的javascript,只是折腾你的听众,甚至在那里。
0

在firefox中添加事件的正常方法是obj.addEventListener(type,fn,false)。所以唯一要做的是:

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

没有理由为此使用jquery。

+0

您将不得不检查您的浏览器是否支持'addEventListener'或不。 “这个世界上的每个人都不使用Firefox”。使用if(window.addEventListener){//做FF} else if(window.attachEvent){//做IE}。 –

+0

他正在寻找Firefox解决方案。 –

0

因为你只需要这在Firefox中工作,DOMContentLoaded事件(这意味着HTML被加载,不包括图像),应听取

document.addEventListener("DOMContentLoaded", function() { 
    // your code here; document.body is available 
}, false);