Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   User JS! (нужна консультация) (https://javascript.ru/forum/misc/3168-user-js-nuzhna-konsultaciya.html)

the_name 24.03.2009 15:02

Не, если алерт пернести в самое начало скрипта, он, конечно, работает. Вот, например, в следующем скрипте алерт срабатывает, а вот замена - нет.
alert('asdf');
document.addEventListener (
    'load',
    function () 
    {
	document.body.innerHTML = document.body.innerHTML.replace(/работает/gi, 'пашет');
    },
    false
  );
Явно ведь, что косяк в русском языке! Ведь попытка заменить 'Kolyaj' на 'asdfasfd' была почти успешной. "Почти", потому что замены сделаны были, а вот местный ДжаваСкрипт работать перестал (кнопочки типа "процитировать", "выделить курсивом" и т.д.). Пришлось отключать плагин и перезагружать страницу. В чем глюк?

the_name 24.03.2009 15:11

На счет МэджикФанкшн. В мануале сказано следующее:
Цитата:

Этот метод может использоваться UserJS для отмены глобальных функций, определенных постоянными скриптами
Посмотрите пожалуйста на объявление функции showBanner. Я, конечно, могу ошибаться, но ведь var создает переменную, да еще и локальную. Может проблема именно в этом?

Gvozd 24.03.2009 15:19

Цитата:

Сообщение от the_name
Явно ведь, что косяк в русском языке!

нет.проблема в чем-то другом у вас.
потому что все отлично "пашет"
тестировал опять таки на этой странице.
все работает как с русским языком, так и с английским.

Уважаемый.Для кого пишутся мои посты и даются ссылки?
вы читали темы, указанные мною полностью?
тогда почему вы все еще пытаетесь пользоватся этим способом замены?
да, этот вариант портит JS. да, он передергивает страницу.да, в указанных мною темах есть скрипты также не лишенные глюков, но которые получше чем этот,и не портят JS к примеру.
и они также работают отлично с русским языком, как и этот.
почему у вас не получается работать с русским языком, я понятия не имею.
выложите код простейшей страницы, на которой у вас не срабтывает замена русских слов, и мы посмотрим что не так.
какой у вас браузер?в другом пробовали?

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

Kolyaj 24.03.2009 15:29

Цитата:

Сообщение от the_name
местный ДжаваСкрипт работать перестал (кнопочки типа "процитировать", "выделить курсивом" и т.д.). Пришлось отключать плагин и перезагружать страницу. В чем глюк?

Таким кодом вы фактически заменяете весь DOM, поэтому навешанные ранее события перестают работать.

Gvozd 24.03.2009 15:39

Цитата:

Сообщение от Kolyaj
Таким кодом вы фактически заменяете весь DOM, поэтому навешанные ранее события перестают работать.

это конечно да.
правда в коде страницы есть обработчики повешенные с помощью атрибута. вот почему они не работают, не понятно.
но, в любом случае такой заменоя пользоватся не стоит.
самый лучший вариант, работать исключительно с текстовыми нодами в индивидуальном порядке.
писал человеку из одного вышеупомянутого треда доведенную до ума версию скрипта.
тормозов нету.нажал, и оно почти мигом проделало все замены, не нарушая DOM-структуру, и меняя ее только там где надо(там замена с добавлением тегов требовалась, поэтому текстовые ноды естественно менялись на набор нод с тегами и без)

the_name 24.03.2009 15:44

Ладно бог с ней, с заменой. За ссылки спасибо, конечно. За скрипты в особенности. А что с МаджикФанкшн-то не так?
У меня опера 9.25.

Kolyaj 24.03.2009 16:22

Код, который вокруг определения showBanner в вражеском скрипте, покажите.

the_name 24.03.2009 18:02

Вот целиком весь тег с вражеской функцией.
<script type="text/javascript">
<!--
var showBanner = function(id, onScroll, size, params){
	var cm=(document.compatMode=="CSS1Compat"),de=document.documentElement,db=document.body;
	var code=function(){
		var rnd = Math.round(Math.random()*1000000000), src = 'http://porno-xxx.ru/cgi-bin/erle.cgi?'+params;
		return '<iframe src="'+src+'" id="'+id+'_'+rnd+'" frameborder="0" vspace="0" hspace="0" '+size+' marginwidth="0" marginheight="0" scrolling="no" style="overflow:hidden"></iframe>';
	};
	var banner = obj = document.getElementById(id); 
	if (!obj)return;
	if (!onScroll) { obj.innerHTML = code(); return; }
	var ar_top = parseInt(obj.style.height)/2;
	while(obj.offsetParent){ ar_top += obj.offsetTop; obj = obj.offsetParent; }
	var ar_scroll = function(){
		var ch = self.innerHeight || cm && de.clientHeight || db.clientHeight;
		var st = self.pageYOffset || cm && de.scrollTop || db.scrollTop;
		if (ar_top > st && st + ch > ar_top) {
			removeEvent(window, 'scroll', ar_scroll);
			banner.style.visibility = "visible";
			banner.innerHTML = code();
		}
	};
	addEvent(window, 'scroll', ar_scroll);
	ar_scroll(id, size, params);
};
onDomReady(function(){
//addEvent(window, 'load', function(){
	new showBanner("banner001", false, 'width="120" height="300"', 'sid=103715&bt=30&pz=1&sz=m_35_44&rnd=' + Math.round(Math.random() * 100000000));
	new showBanner("banner002", true, 'width="600" height="90"', 'sid=103715&bt=19&pz=1&sz=m_35_44&rnd=' + Math.round(Math.random() * 100000000));
	//clean AR
	var c = document.cookie.split(/\s*;\s*/);
	var date = new Date(); date.setTime(1); var exp = date.toGMTString();
	for (var i=0;i<c.length;i++) {
		var n = c[i].split('=')[0];
		if (n.substr(0, 3) == "ar_") {
			document.cookie = n + "= ; expires=" + exp + "; path=/";
		}
	}
});

//-->
</script>
Выше я намеренно для простоты писал, что showBanner имеет только 2 аргумента. Сути это не меняет.

Kolyaj 24.03.2009 18:06

Зная оперу, можно предположить, что в данном случае ей нужен defineMagicVariable.

ZoNT 24.03.2009 18:25

Знакомый код :lol:


Часовой пояс GMT +3, время: 18:57.