页面加载后Javascript运行功能

时间:2011-11-05 21:59:51

标签: javascript opera onload

我正在尝试在Javascript中创建一个小型自动化脚本,我想使用Opera的用户脚本功能运行一个站点,以定义要运行的外部脚本。我之前使用过这个功能来运行我用外部网站编写的脚本,效果很好。

我需要等到页面加载才能运行脚本,但我似乎无法让它工作。目前的代码是:

if (addEventListener in document) { // use W3C standard method
    document.addEventListener('load', meerfirst(), false);
} else { // fall back to traditional method
    document.onload = meerfirst();
}

function meerfirst(){
    nameForm = document.forms['aspnetForm'];
    nameForm.elements('ctl00$CPH1$NewQuoteView$TitlesView$DropDownListTitles').value = 'MR:TRUE:MR';
    nameForm.elements('ctl00$CPH1$NewQuoteView$TextBoxFirstName').value = 'James';
 }

这是我自己的函数,添加了通过另一个问题找到的if语句。我也试过window.onload,但它仍然无法正常工作。

奇怪的是Opera根本就没有真正执行脚本,好像我在if语句上设置了一个断点,它从来没有实际打破它。该网站是否内置了反用户脚本功能?或者有可能我做错了什么来阻止这个执行?

4 个答案:

答案 0 :(得分:5)

将函数本身作为回调传递

addEventListener('load', meerfirst, false);
                  // no parens! ^^

通过放置括号,您可以立即调用函数(在加载之前)并将其(无用的,非函数)返回值传递给addEventListener。


BTW,既然您已经知道将使用哪些浏览器代码,为什么一开始就进行功能测试呢?

答案 1 :(得分:3)

此代码有几个问题:

if (addEventListener in document) { // use W3C standard method
    document.addEventListener('load', meerfirst(), false);
} else { // fall back to traditional method
    document.onload = meerfirst();
}
  1. 您需要在if语句中添加addEventListener周围的引号。您在document中搜索属性名称,因此名称必须为字符串if( 'addEventListener' in document )

  2. 您希望在addEventListener语句中按名称引用该函数,而不是立即调用它。您应该删除括号 - 仅使用meerfirst而不是meerfirst()

  3. 分配给document.onload无效。请参阅我对window.onload vs document.onload的回答,然后使用window.onload。

  4. 将作业更改为窗口 .onload后,您还需要删除括号。同样,您只是按名称引用该函数,并且不希望此时实际调用它。

  5. 最后,我建议您监听DOMContentLoaded而不是load - 除非您要运行一些需要等到所有图片都加载的代码。

答案 2 :(得分:2)

尝试:

window.onload = function() 
{

meerfirst();

};

答案 3 :(得分:2)

你的答案很好地嵌入了O' Reilly" Javascript:the Definitive Guide"

// Register the function f to run when the document finishes loading.
// If the document has already loaded, run it asynchronously ASAP.
function onLoad(f) {
    if (onLoad.loaded) // If document is already loaded
        window.setTimeout(f, 0); // Queue f to be run as soon as possible
    else if (window.addEventListener) // Standard event registration method
        window.addEventListener("load", f, false);
    else if (window.attachEvent) // IE8 and earlier use this instead
        window.attachEvent("onload", f);
}
// Start by setting a flag that indicates that the document is not loaded yet.
onLoad.loaded = false;
// And register a function to set the flag when the document does load.
onLoad(function() { onLoad.loaded = true; });

这不仅会在浏览器完成加载时运行,而且还会处理跨浏览器的差异。享受:)