繁体   English   中英

Windows onload无法从外部脚本触发

[英]windows onload not firing from external script

好的,我知道这个问题已经被问了很多,但似乎没有一种解决方案真正适合我。 这是情况。 我有一个需要添加到现有网站的网页,该网站使用的母版页面我无法触摸。 这限制了我使用javascripts window.onload的权限,因为我无权访问body标签。

在我的页面上,我已将我的外部.js文件链接在所有其他外部文件下面的头部中。 这是我的.js文件外观的示例。

var myobj = null;
(5 or so functions that work properly. Mainly just toggles that show and hide divs. none touch the onload)
function load(){
myobj = document.getElementById("my_element");
alert("test");
}
window.onload = load;

尝试了这一点,并且加载功能从未触发,因为我从未收到警报。 我尝试注释掉load函数的第一行,但没有警告,仍然一无所获。 环顾四周,我还发现了另一种尝试失败的方法。 除我删除window.load并添加此内容外,其他所有内容均相同。

function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
    window.onload = func;
} else {
    window.onload = function () {
        if (oldonload) {
            oldonload();
        }
        func();
    }


  }
}
addLoadEvent(load);
addLoadEvent(function () {
    /* more code to run on page load */
    alert("hello2");
});

在此功能中,不会触发任何警报。 我还尝试过在功能之外放置一个警报,该警报确实起作用。

我正在使用的浏览器是IE 8.0.7600.16385和Chrome 21.0.1180.60

如果您需要更多信息,请与我们联系。

哦,作为补充,我不能使用jquery或任何其他javascript库,因为我们正努力使它尽可能轻。 此页面也必须在IE8中工作,这是当前仅支持企业的浏览器。 如果它也适用于Chrome,那将是很好的。

编辑以防万一我完全以错误的方式进行操作,我想做的是跟踪我拥有的最后一个元素。 我基本上有一个包含2列的页面,左侧是菜单,右侧是内容。 内容全部放在div中,一次仅显示一个类别。 它的工作方式是单击菜单类别时,它将隐藏先前的内容并显示新的内容。

我将内容类设置为显示:无; 并将start_content ID设置为显示:block;。 Javascript应该做的是使用start_content对象初始化我的全局变量。 在菜单中单击时,它将调用一个执行obj.style.display ='none'的函数,然后将新的obj设置为display ='block'。 然后,它将新的obj放入到我的全局变量中,以在下次单击菜单时进行更改。

这是一个没有任何onload函数的示例

var prevContent = document.getElementById("start_content");
function toggle(id) {
prevContent.style.display = "none";
var content = document.getElementById(id);
content.style.display = "block";
prevContent = content;
}

问题在于,prevContent进入切换功能时无法识别。 我以为这是因为我将这个.js文件链接到头部,因此该页面尚未加载start_content,这就是为什么我将其更改为将global声明为null,然后将window.onload设置为在创建之后设置适当的值。

最后,将“ Defer”添加到脚本标签中就可以了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM