Включение файла js в HTML - PullRequest
       17

Включение файла js в HTML

0 голосов
/ 22 января 2009

Я включил огромный файл JavaScript (500 КБ) в мой HTML. Есть ли умный способ узнать, был ли он загружен. Один из способов, который я могу придумать, - это иметь переменную в своем конструкторе для инициализации и информирования меня. Загрузка асинхронная, и я не могу продолжить, пока не будут включены функции этого JS.

Спасибо

Ответы [ 6 ]

6 голосов
/ 22 января 2009

Используя jQuery, вы можете обрабатывать функцию обратного вызова, которая запускается при загрузке файла скрипта:

$.getScript("yourScriptFile.js", function(){
  // What to do when the script is loaded
});

Docs

3 голосов
/ 22 января 2009

Как пояснение к ответу Оскара:

<script type='text/javascript' src='script.js'></script>
<script type='text/javascript'>
 alert('the file has loaded!'); 
 //Anything here will not be executed before the script.js was loaded
</script>

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

<head>
<script type='text/javascript' src='script.js'></script>
</head>
<body>
 Nothing here will be rendered until the script has finished loading
</body>

Лучше:

<head>
</head>
<body>
 I will be rendered immidiatly
</body>
<script type='text/javascript' src='script.js'></script>
</html>

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

0 голосов
/ 22 января 2009

Возможно, вопрос можно переформулировать: откуда мне знать, что мой скрипт загружен на html-страницу? Разместив скрипт внизу страницы, вы убедитесь, что все DOM-элементы доступны вашему скрипту. Когда вы хотите узнать, доступен ли ваш скрипт, вам следует проверить, доступна ли функция для запуска. Может быть, этот конструктор может помочь:

function Wait(what,action,id){
 var _x = this,
     rep = document.getElementById('report'),
     cnt = 0,
     timeout = 5,
     interval = 100;

  _x.id = id;

  if (!(what instanceof Function)) {
   return true; //or say something about it
  }

  function dowait() {
   cnt += interval;
   if (what())
   {
      clearInterval(_x.iv);
      action();
      return true;
   }
   if (cnt>(timeout*1000))
   {
      clearInterval(_x.iv);
          //[do some timeout-action]
      return true; 
   }
 }
 _x.iv = setInterval(dowait,interval);

}

Конструктор принимает функцию (возвращающую логическое значение) в качестве первого аргумента. Как

function(){return document.getElementById('someelement').innerHTML = '';}

Так что, если вы включите это перед вашим javascript, вы можете сделать что-то вроде:

var testfn = 
     function(){return document.getElementById('someElement').innerHTML = '';},
   callback = 
     function(){alert('someElement is empty')},
   dummy = null;
window.onload=function(dummy=new Wait(testfn,calllback);
0 голосов
/ 22 января 2009

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

0 голосов
/ 22 января 2009

Вы пытались сжать файл javascript? Перемещение некоторых функций в отдельные файлы Javascript и только включение необходимого JavaScript?

0 голосов
/ 22 января 2009
<SCRIPT LANGUAGE="JavaScript" SRC="filename">
</SCRIPT>

??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...