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
|
|
|
|
Поиск по сайту
|
|
Содержание
|
|
Последние темы на форуме
|
Forum |
|
Жаль нельзя вместо заголовка юзать
Может я не прав, но то, что здесь приведено, работает совсем не как include.
Вот пример простейшего кода, где этот include падает:
"temp.html":
"temp.js":
Как результат выведется:
1. "Bad include!!!"
2. "Good include!!!"
Хотя по правилам include должно быть наоборот:
1. "Good include!!!"
2. "Bad include!!!"
Иначе, зачем мне подключать библиотеку, в которой описаны функции, но применять я их не смогу?
.. в < head >
Включение в не гарантирует исполнение скрипта, добавляемого в "include" до других скриптов, исполняющихся на этой странице. Даже если переменная из include-файла используется в скрипте уже в - нет гарантий, что скрипт уже загрузился и переменная инициализирована.
Упс, теги режутся.
Включение в < head > не гарантирует исполнение скрипта, добавляемого в "include" до других скриптов, исполняющихся на этой странице. Даже если переменная из include-файла используется в скрипте уже в < body > - нет гарантий, что скрипт уже загрузился и переменная инициализирована.
js.onload = function(){alert('bad include');}
Скрипт же не может у тебя мгновенно загрузиться.....
А если без строки
?
К сожалению, эта строчка мало влияет на результат.
Параметр defer откладывает выполнение скрипта до тех пор, пока вся страница не будет загружена полностью, это правда.
Но его отсутствие НЕ гарантирует обратного.
На реальных тестах этот include (без параметра defer) падает на раз два.
callback запускается после полной загрузки скрипта.
А что будет в случае ошибки в загружаемом скрипте? callback вроде не вызовется.
Если инклуд в
поместить, то будет все в норме. Проверил на алертах
вот моя функция аналога include:
ВАЖНО! легче делать так, в загружаемый скрипт пишите главную функцию и после включайте эту функцию с таймером например settimeout(main, 10);
таймер нужен для того чтобы скрипт успел загрузиться и пользуйтесь на здоровье =)