簡體   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