Feb 28 2010

Przerejestrowanie obiektow JS po zaladowaniu kontentu AJAX’em

Niewielka sprawa, jednak zabrala mi troche czasu. Ten przypadek wymagal dociagania skryptow JS w zaleznosci od zaladowanego kontentu (On Demand JS) lecz dostarczane obiekty mialy nazywac sie identycznie. Wazne bylo, aby metoda getAnswer obiektu Question zwracala odpowiednio sformatowane dane, w zaleznosci od wyswietlonego kontentu. Silnik ladowany byl po wejsciu na strone wraz z zawartoscia zawierajaca obiekty JS, logiczne wiec, ze parser je wczytal i zarejestrowal. Wymienny kontent zawieral override’y zaladowanych obiektow, ktore niestety nie rejestrowaly sie automatycznie.

Mamy wiec cos podobnego

Question = function()
{
	this.answer = null;
	{ body }
};
 
Question.prototype.getAnswer = function()
{
	if (this.answer != null) {
		return this.answer;
	} else {
		{ body }
	}
};

w kazdej dynamicznie dostarczanej zawartosci z ta roznica, ze { body } roznie formatowalo dane

Aby dzialalo to poprawnie, nalezy po wczytaniu kontentu AJAX’em zarejestrowac wczytane obiekty, a mozna to zrobic tak

function reloadScripts(id) {
	// pobieramy obiekt zawierajacy override'y
	var obj = document.getElementById(id);
	if (obj) {
		// wyciagamy tagi potencjalnie zawierajace skrypty JS
		var scripts = obj.getElementsByTagName("script");
		for (var i = 0; i < scripts.length; i++) {
			script = scripts[i].innerHTML;
			// rejestrujemy JS'y
			eval(script);
		}
	}
};

lub tak, jezeli dostarczamy jedynie JS’y

eval(ajax.xmlHttp.responseText);

Jak masz inny pomysl na rozwiazanie tego problemu … nie krepuj sie, daj komentsa :)


Jan 27 2010

Ku..wa, znowu ten IE

Nie moge, po prostu nie moge.
Miala to byc prosta modyfikacja, ciach ciach, to wyrzucamy, tutaj dodajemy. Gotowe, jeszcze maly tescik…, silnik Gecko… w porzadku, silnik WebKit… no problems, IE – tu zawsze syf, ale przy takich zmianach wszystko musi byc spoko…, o ku..wa, to nie jest mozliwe, font na pol ekranu – co jest grane? Menus->Widok->Rozmiar tekstu, >>zonk<<, jest Srednia – wiec jest ok – nie wnikam, ze Rozmiar tekstu i Srednia jakos do siebie nie pasuja.
Easy, ommm… wyczysc cache’a… nic, restart IE… nic, ku..wa hardcore. Ommm… dobra, to zawsze pomagalo Menus->Narzedzia->Opcje internetowe->Zaawansowane->Resetuj i jeszcze raz Resetuj, cos pomielil i twierdzi, ze musi sie zresetowac, spoko dam rade, restart. Otwieram ponownie… f4ck, musze zrobic przerwe…….

Ochlonalem, odpalam na innym kompie z Winda, gowno, ten sam effect. Revers tego co zrobilem… nie uwierzycie… XHTML 1.0 Transitional, prosty ku..wa tag, <h2 />, nie bo IE szuka jeb..ego konca bloku </h2>.

Wymiekam, wszedzie dziala ale IE wie lepiej

<h2 /> != <h2></h2>

wbrew temu co twierdzi validator.w3.org