Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 15.04.2009, 20:44
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от LamerNo1
в файле скрипта обязательно должна быть прописана функция... тамскрипт не просто алерт
может попробовать таймаут выставить... секнду-две
Че?
Ответить с цитированием
  #22 (permalink)  
Старый 15.04.2009, 23:22
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

LamerNo1 в любом случае надо выяснить причину, т.е. постепенно сокращать скрипт, пока он не станет запускаться. Например, в конце скрипта можно вставить тот же alert. При это появление диалогового окна будет означать, что скрипт запустился
Ответить с цитированием
  #23 (permalink)  
Старый 03.05.2009, 02:12
Аватар для azgard
Интересующийся
Отправить личное сообщение для azgard Посмотреть профиль Найти все сообщения от azgard
 
Регистрация: 28.04.2009
Сообщений: 14

Так получилось сделать?
Ответить с цитированием
  #24 (permalink)  
Старый 29.05.2009, 00:31
Аспирант
Отправить личное сообщение для Pattern Посмотреть профиль Найти все сообщения от Pattern
 
Регистрация: 13.05.2009
Сообщений: 37

test.js
var AnyElem={
	param1: 'val1',
	param2: 2,
	setParam: function(p,v){
		if(this[p]&&v){
			this[p]=(typeof this[p]==='string')?v.length>0?v:'':parseInt(v);
		}
	}
};

index.html
<html>
<head>
<script language="javascript">
function loadSrc(p){
	if(p&&p.length>0){
		var s=document.createElement('script');
		with(s){
			setAttribute('type', 'text/javascript');
			setAttribute('language', 'javascript');
			src=p;
		}
//		document.getElementsByTagName('head')[0].appendChild(s);
		document.body.appendChild(s);
	}
}
var init=function(){
	loadSrc('test.js');
	console.log(AnyElem);
}
</script>
</head>
<body onload="init()">
</body>
</html>

Лог консоли FF3
Цитата:
AnyElem is not defined
init()()index.html (line 18)
onload(load )5R3LNk3t...zow%3D%3D (line 2)
[Break on this error] console.log(AnyElem);
Ничего не понял, у кого и что работает?
Ответить с цитированием
  #25 (permalink)  
Старый 29.05.2009, 00:55
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

jquery, например, так не делает, она создает элемент, в который вставляет скрипт, а потом этот элемент вставляет в документ. Примерно так:
var script = document.createElement("script"),
id = "script" + (new Date).getTime();
	script.type = "text/javascript";
	try {
		script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
	} catch(e){}

	root.insertBefore( script, root.firstChild );
	
	// Make sure that the execution of code works by injecting a script
	// tag with appendChild/createTextNode
	// (IE doesn't support this, fails, and uses .text instead)
	if ( window[ id ] ) {
		jQuery.support.scriptEval = true;
		delete window[ id ];
	}

	root.removeChild( script );


	// Evalulates a script in a global context
	globalEval: function( data ) {
		if ( data && /\S/.test(data) ) {
			// Inspired by code by Andrea Giammarchi
			// [url]http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html[/url]
			var head = document.getElementsByTagName("head")[0] || document.documentElement,
				script = document.createElement("script");

			script.type = "text/javascript";
			if ( jQuery.support.scriptEval )
				script.appendChild( document.createTextNode( data ) );
			else
				script.text = data;

			// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
			// This arises when a base node is used (#2709).
			head.insertBefore( script, head.firstChild );
			head.removeChild( script );
		}
	},

p.s. по-моему ничего важного не пропустил
Ответить с цитированием
  #26 (permalink)  
Старый 29.05.2009, 09:04
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

. .

Последний раз редактировалось Kolyaj, 29.05.2009 в 09:06.
Ответить с цитированием
  #27 (permalink)  
Старый 29.05.2009, 10:15
Аспирант
Отправить личное сообщение для Pattern Посмотреть профиль Найти все сообщения от Pattern
 
Регистрация: 13.05.2009
Сообщений: 37

Общий принцип понятен, но по моему через чур заморочисто... Можно использовать по принципу "если нельзя, но очень хочется, то можно"... в самых крайних условиях.
ИМХО, легче до начала инициализации подгрузить все скрипты и спокойно работать...
Ответить с цитированием
  #28 (permalink)  
Старый 29.05.2009, 10:37
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

да уж, сообщение: "Подгружаются все скрипты, приходите завтра!"
p.s. я и не говорил, что нужно этим повсеместно пользоваться
Ответить с цитированием
  #29 (permalink)  
Старый 02.06.2009, 10:56
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Я делал немного проще...

var head=document.documentElement.firstChild; // Есть и другие варианты получить head. Кому как удобнее.

// Подключаем скрип
var js=document.createElement('script');
js.type='text/javascript';
js.src='script.js';
head.appendChild(js);

//Подключаем стили (так... до кучи...)
var css=document.createElement('link');
css.href='style.css';
css.media='screen'; //all, print ect.
css.rel='stylesheet';
css.type='text/css';
head.appendChild(css);


Работает везде, где нада (не придерацца к мелочам!!).
Проверить загрузился ли скрипт нужно вариантом с callback имхо.

Более точно проверять можно при использовании аякс. Получили в xml, распарсили, вставили(как вариант).
Ответить с цитированием
  #30 (permalink)  
Старый 02.06.2009, 12:09
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

B~Vladi,
для общего развития. Попробуйте запустить ваш код в ИЕ6 в контексте такой вот страницы.
<html>
<head>
    <base href="/" />
    <script type="text/javascript">
        var head=document.documentElement.firstChild; // Есть и другие варианты получить head. Кому как удобнее.
        var js=document.createElement('script');
        js.type='text/javascript';
        js.src='script.js';
        head.appendChild(js);
    </script>
</head>
<body>
</body>
</html>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отловить событие изменения элемента pavl Events/DOM/Window 13 13.04.2009 14:00
какое событие возникает во время формирования html IT-AleX Events/DOM/Window 2 20.02.2009 16:13
Событие OnLoad у iframe в IE milk3dfx Events/DOM/Window 2 16.02.2009 22:09
как проверить поддеружет браузер определенное событие? GOll Элементы интерфейса 9 24.07.2008 14:40
JavaScript как файл закодировать base64? Трактор AJAX и COMET 3 10.06.2008 13:22