目录

来源:http://trac.seagullproject.org/wiki/Howto/JavaScript/OnloadEvents

管理onload和onreadyDOM事件

你可能想在页面载入时运行某些脚本。长时间以来,开发人员是通过为window.onload事件指定一个处理器:

/* Some HTML */
<body onload="init()">

/* In Javascript */
window.onload = function() {
    init();
}

You can add as many onload event handlers in your code (Managers) by calling the $output→addOnLoadEvent() as follows 你可以在manager中通过调用$output→addOnLoadEvent()载入任意个onload事件的处理器,如

$output->addOnLoadEvent("init()");

问题出现在onload事件只在所有页面内容(包括图像,框架和其它任何二进制内容)被载入之后才被激发。如果你的页面上有很多图像,在页面激活之前会有一段时间是停滞不前的。

0.6.2 onReadyDOM特性

在大多数情况下,你启动你的网站是为了使你的DOM可用,因为你的脚本将和DOM结点交互,如,页面元素。所有我们将Dean Edwards的window.load集成到seagull中,这样你只需给$output→addLoadEvent()方法再传递一个参数(这个参数是可选的),脚本会在DOM就绪后立即执行。

从你的manager中

在display方法中

function display(&$output) {
    $output->addOnLoadEvent("init('param')", true)
}

注意函数被包含在双引号中,而该函数的参数是用单引号括起来的。第二个参数为了向后兼容(BC)默认是设置成fault。在以后的新版本中它将被设置成true。

从javascript脚本

在任何地方调用sgl.ready(),它会在DOM就绪后立即执行。如果需要的话,你可以调用多个sgl.ready()。

sgl.ready(function() {
    init('param');
});

Notice that you have to pass sgl.ready() an anonymous (lambda) function. 如果你没这么做,你有可能会得到一个错误。因为这个函数会有javascript解析这行时立即执行这个函数。

0.6.2其它特性

为了增强javascript在Seagull框架中的集成度,我们增加了$output→addOnUnloadEvent()

  $output→addOnUnloadEvent(“foo()”);

你有可能想要在所有的页面中执行某个处理器。全局配置文件增加了一些配置选项,你可以在全局文件中添加JS:

$conf['site']['globalJavascriptOnload']     = '';
$conf['site']['globalJavascriptOnUnload']   = '';
$conf['site']['globalJavascriptOnReadyDom'] = '';

参考资料