2011-07-29 50 views
1

我在論壇上搜索了一下,似乎無法弄清楚如何解決當新頁面加載時出現白色閃爍的常見問題。jquery導致加載「白色」

我試圖把這個上面我的其他JavaScript的克里斯Coyer的例子:

// Prevent variables from being global 
(function() { 

     /* 
      1. Inject CSS which makes iframe invisible 
     */ 

    var div = document.createElement('div'), 
     ref = document.getElementsByTagName('base')[0] || 
       document.getElementsByTagName('script')[0]; 

    div.innerHTML = '&shy;<style> iframe { visibility: hidden; } </style>'; 

    ref.parentNode.insertBefore(div, ref); 

    /* 
     2. When window loads, remove that CSS, 
      making iframe visible again 
    */ 

    window.onload = function() { 
     div.parentNode.removeChild(div); 
    } 

})(); 

但是,仍然閃爍。我是javascript的noob,所以我不確定我做錯了什麼。

這是最糟糕的頁面是:http://thegoodgirlsnyc.com/test/new/index3_7.php

+1

您可以控制網站的來源。只需設置iframe或whatnot顯示:無,然後'window.onload = function(){ $(「#myiframe」)。show(); }' –

回答

4

如果你正在使用jQuery嘗試用你的包裹功能:

$(document).ready(function(){ 
/* Code goes here */ 
}); 

當文檔準備好(滿載),這將執行代碼

2

問題是你正在整個頁面加載執行任務。由於代碼正在與頁面加載一起及時運行,因此您正在閃爍。

您需要抽象統一點背後的代碼運行。在這裏,像$(document).ready()這樣的東西很適合jQuery。它發生在DOM完成時,但在window加載完成之前。這意味着它發生在視覺之前,這會阻止屏幕快照Javascriptiong。

好像你擔心的全局命名空間:

jQuery(function($){ 
    $('iframe').hide(); 

    $(document).ready(function(){ 
     $('iframe').show(); 
    }); 
}); 

這是一個簡單的解決方案,緩解了命名空間的問題,你會不會有重構當前的代碼。所以我的答案是兩部分:

  1. 使用jQuery。

  2. 使用命名空間。

如果仍然使用上面的屏幕閃爍,您需要設置displaynone在樣式表的iframe元素。