2011-12-23 5 views
12

Я пытаюсь создать сценарий синтаксического ярлыка. Я попытался использовать мой скрипт в коде с 10 тысячами строк, и все, что я вижу, это пустая страница, когда она загружается. Все будет отображаться только после того, как скрипт завершит свою задачу. Кстати, я назвал свой скрипт внутри готовой функции jQuery.Запуск javascript после полной обработки страницы

$(myFunction); 

Сценарий должен выполняться после того, как страница полностью оказанный, и пользователь может фактически перемещаться по странице, даже если сценарий еще не закончен. Javascript будет работать в фоновом режиме, поскольку он выделяет код один за другим, но не мешает повторности страницы. Заранее спасибо.

EDIT:

Чтобы сделать это более ясным, я хотел бы выполнить код после того, как все «оказывается» не «загружен». Все должно быть видно на экране, и пользователь может увидеть, как код оживает, когда он подсвечивается. Благодарю.

+0

Этот фрагмент кода предназначен для того, когда DOM готов к обработке, а не при загрузке каждого ресурса. К сожалению, я не знаю какого-либо ясного и не-глючного способа проверить, что каждый элемент загружен. – nickjyc

+0

Возможный дубликат [Как вы выполняете функцию Javascript, когда страница полностью отображается?] (Http://stackoverflow.com/questions/939538/how-do-you-execute-a-javascript-function-when-the -page-has-full-rendered) – JosephStyons

+0

Вы должны использовать async в теге скрипта, веб-мастерах и событии onload для создания веб-мастеров. –

ответ

18

Вы имеете в виду после того, как все изображения были загружены?

Я думаю window.onload это то, что вы ищете

window.onload = function() { 
    //dom not only ready, but everything is loaded 
}; 

EDIT

комментарий Пера Криса, вот JQuery путь:

$(window).load(function() { 
    //dom not only ready, but everything is loaded 
}); 
+1

Способ jQuery сделать это будет $ (window) .load (function() {...}); – ChrisM

+0

Спасибо @ChrisM - +1 :) –

+0

Решение не сработало. Страница остается пустой при загрузке javascript. Любое другое решение? Я редактировал свой пост, чтобы подчеркнуть, что я хочу. Благодарю. –

0

Не знаю точно, сколько данных вносятся ... но что, если на готовом документе вы запустили jquery ajax call и использовали завершенный метод для запуска вашего функция hlighter? Если будет много данных, это будет медленная загрузка страницы.

В любом случае хотел бы похож на этот

$.ajax({ 
      type: "POST", 
      url: "Where data is actually stored", 
      data: { ChannelTypeID: ChannelTypeID }, 
      datatype: "html", 
      beforeSend: function() { 

      }, 
      success: function (myHTML) { 
       $('body').html(myHTML); 
      }, 
      error: function() { 
       alert("Ajax request was unsuccessful"); 
      }, 
      complete: function() { 
       highlighterFunction(); 
      } 
     }); 

Полный метод определяет функцию, которая будет работать, когда запрос AJAX завершается. Надеемся, что успех будет достаточно быстрым, чтобы выталкивать данные и позволять вашей подсветке работать должным образом.

+0

Привет, код, который будет выделен, уже находится на странице, заключенной в предварительные теги. –

0

Простой способ сделать это путем введения задержки. Используйте setTimeout() для достижения этого. Например: setTimeout (func, 1000);

Вышеуказанная строка выполняет функцию func после ожидания 1000 миллисекунд. В зависимости от времени, которое требуется для загрузки вашего контента, установите поле времени (параметр) в setTimeout. Использование

Примера:

$(document).ready(function(){ 

function func() 
{ 
    alert("hi"); 
} 
setTimeout(func, 1000); 
}); 

Надеется, что это помогает!

+7

как вы можете предоставить эту страницу, загружаемую через 1000 мс? поэтому лучше использовать функцию window.load –

0

Проблемы с window.onload подходов

Даже если вы используете $(window).load подход, ваш фломастер материал может получить запустить до чего-то от $(document).ready завершения, так как там может быть много асинхронных функции обратного вызова во всем место.

Мой подход

Я использую комбинацию ждет document.readyState == 'complete и setTimeout. Идея состоит в том, что я хочу подождать, пока страница будет полностью отображена (отсюда 'complete'), а затем убедитесь, что содержимое обертки $(document).ready JQuery завершено (следовательно, setTimeout).

Вот как я мог бы решить вашу проблему, предполагая, что 200 миллисекунд достаточно времени для всего внутри $(document).ready(function(){ /*...*/ });.

function highlighterAction() { 
    // actually do the highlighting stuff here 
} 

function highlighter() { 
    /* 
     The short pause allows any required callback functions 
     to execute before actually highlighting, and allows 
     the JQuery $(document).ready wrapper to finish. 
    */ 
    setTimeout(function() { 
     highlighterAction(); 
    }, 200); 
} 

/* 
    Only trigger the highlighter after document fully loaded. This is 
    necessary for cases where page load takes a significant length 
    of time to fully load. 
*/ 
if (document.readyState == 'complete') { 
    highlighter(); 
} else { 
    document.onreadystatechange = function() { 
     if (document.readyState === "complete") { 
      highlighter(); 
     } 
    } 
}