Javascript.RU

PHP-функция: include

Javascript:

function include( filename ) {	// The include() statement includes and evaluates the specified file.
	// 
	// +   original by: mdsjack (http://www.mdsjack.bo.it)
	// +   improved by: Legaev Andrey
	// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +   improved by: Michael White (http://crestidg.com)
	// %		note 1: Force Javascript execution to pause until the file is loaded. Usually causes failure if the file never loads. ( Use sparingly! )

	var js = document.createElement('script');
	js.setAttribute('type', 'text/javascript');
	js.setAttribute('src', filename);
	js.setAttribute('defer', 'defer');
	document.getElementsByTagName('HEAD')[0].appendChild(js);

	// save include state for reference by include_once
	var cur_file = {};
	cur_file[window.location.href] = 1;

	if (!window.php_js) window.php_js = {};
	if (!window.php_js.includes) window.php_js.includes = cur_file;
	if (!window.php_js.includes[filename]) {
		window.php_js.includes[filename] = 1;
	} else {
		window.php_js.includes[filename]++;
	}

	return window.php_js.includes[filename];
}

Примеры:

include('/js/imaginary1.js');
1


Автор: Гость (не зарегистрирован), дата: 18 февраля, 2009 - 02:59
#permalink

Жаль нельзя вместо заголовка юзать


Автор: Радюк Сергей, дата: 13 июля, 2009 - 11:48
#permalink

Может я не прав, но то, что здесь приведено, работает совсем не как include.

Вот пример простейшего кода, где этот include падает:
"temp.html":

<HTML>
   <HEAD>
      <SCRIPT src="include.js" type="text/javascript" >
      </SCRIPT>
   </HEAD>
   <BODY>
      <SCRIPT type="text/javascript" >
         include('temp.js');
         alert ("Bad include!!!");
      </SCRIPT>
   </BODY>
</HTML>

"temp.js":

alert ("Good include!!!");

Как результат выведется:
1. "Bad include!!!"
2. "Good include!!!"

Хотя по правилам include должно быть наоборот:
1. "Good include!!!"
2. "Bad include!!!"

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


Автор: Гость (не зарегистрирован), дата: 25 декабря, 2009 - 22:25
#permalink

.. в < head >


Автор: nikonian (не зарегистрирован), дата: 9 февраля, 2010 - 21:47
#permalink

Включение в не гарантирует исполнение скрипта, добавляемого в "include" до других скриптов, исполняющихся на этой странице. Даже если переменная из include-файла используется в скрипте уже в - нет гарантий, что скрипт уже загрузился и переменная инициализирована.


Автор: Гость (не зарегистрирован), дата: 9 февраля, 2010 - 21:49
#permalink

Упс, теги режутся.
Включение в < head > не гарантирует исполнение скрипта, добавляемого в "include" до других скриптов, исполняющихся на этой странице. Даже если переменная из include-файла используется в скрипте уже в < body > - нет гарантий, что скрипт уже загрузился и переменная инициализирована.


Автор: Гость (не зарегистрирован), дата: 6 марта, 2010 - 23:05
#permalink

js.onload = function(){alert('bad include');}

Скрипт же не может у тебя мгновенно загрузиться.....


Автор: Илья Кантор, дата: 13 июля, 2009 - 17:41
#permalink

А если без строки

js.setAttribute('defer', 'defer');

?


Автор: Радюк Сергей, дата: 14 июля, 2009 - 05:41
#permalink

К сожалению, эта строчка мало влияет на результат.

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

Но его отсутствие НЕ гарантирует обратного.

На реальных тестах этот include (без параметра defer) падает на раз два.


Автор: mexoboy, дата: 18 марта, 2010 - 17:56
#permalink

callback запускается после полной загрузки скрипта.

function include(src, callback)
{
	var head = document.getElementsByTagName('head')[0];
	var script = document.createElement('script');
	script.type = 'text/javascript';

	if(callback)
	{
		var userAgent = navigator.userAgent.toLowerCase();
		
		if(/msie/.test( userAgent ) && !/opera/.test( userAgent ))
		{
			script.onreadystatechange = function()
			{
				if(script.readyState == 'complete')
					callback();
			}
		}
		else
		{
			script.onload = function ()
			{
				callback();
			}
		}
	}

	script.src = src;
	head.appendChild(script);
}

Автор: PeaceCoder, дата: 13 июля, 2010 - 18:19
#permalink

А что будет в случае ошибки в загружаемом скрипте? callback вроде не вызовется.


Автор: leonP4 (не зарегистрирован), дата: 6 марта, 2013 - 20:47
#permalink

Если инклуд в

$(document).ready(function() {}

поместить, то будет все в норме. Проверил на алертах


Автор: Гость (не зарегистрирован), дата: 12 февраля, 2015 - 12:20
#permalink

вот моя функция аналога include:

function includeJS ( src ) {
	var Elem = document.createElement('script');
	Elem.src = src;
	document.getElementsByTagName('head')[0].appendChild( Elem );
}
includeJS ('scripts/demo.js');

ВАЖНО! легче делать так, в загружаемый скрипт пишите главную функцию и после включайте эту функцию с таймером например settimeout(main, 10);
таймер нужен для того чтобы скрипт успел загрузиться и пользуйтесь на здоровье =)


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
1 + 0 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum