Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблемы с onclick (https://javascript.ru/forum/misc/38411-problemy-s-onclick.html)

Nexus 31.05.2013 03:32

Проблемы с onclick
 
Здравствуйте, ответьте, пожалуйста, на вопрос.
Почему не работает onclick?

html страницы:
<!DOCTYPE html>
<html>
<head>
<title>Onclick</title>
</head>
<body>

</body>
</html>


js-код, который будет воспроизводить GreaseMonkey:

document.getElementsByTagName('body')[0].innerHTML='<div></div>';
document.getElementsByTagName('body')[0].getElementsByTagName('div')[0].innerHTML='<div></div>';
document.getElementsByTagName('body')[0].getElementsByTagName('div')[0].getElementsByTagName('div')[0].innerHTML='<a>Click</a>';
document.getElementsByTagName('body')[0].getElementsByTagName('div')[0].getElementsByTagName('div')[0].getElementsByTagName('a')[0].onclick=function() {document.getElementsByTagName('a')[0].innerHTML+='!';}


Заранее спасибо.

Aetae 31.05.2013 03:55

В GreaseMonkey запрещено добавление обработчика через свойство
x.onclick = function(){}
. Вместо этого нужно использовать
x.addEventListener('click', function(){}, false)


P.S.
document.getElementsByTagName('body')[0].innerHTML='<div><div><a>Click</a></div></div>';

Nexus 31.05.2013 12:26

Цитата:

Сообщение от Aetae (Сообщение 253738)
В GreaseMonkey запрещено добавление обработчика через свойство
x.onclick = function(){}

Однако этот код работает:
document.getElementsByClassName('main')[0].innerHTML+='<div class="line"></div><div id="script_foot"><a href="javascript://">Настройки</a></div>';
document.getElementById('script_foot').getElementsByTagName('a')[0].onclick=function(){script_option();window.scrollTo(0,0);}


Цитата:

Сообщение от Aetae (Сообщение 253738)
P.S.
document.getElementsByTagName('body')[0].innerHTML='<div><div><a>Click</a></div></div>';

Приведенный мною код лучше отражает суть проблемы.

Меня больше интересует почему в одних случаях событие срабатывает, а в других нет?

Nexus 01.06.2013 19:27

Неужели ответа не будет?(

Aetae 01.06.2013 19:55

Я тебе уже ответил. Onclick и не должен работать. Почему работает во втором случае - другой вопрос.

Nexus 01.06.2013 20:24

Aetae,
addEventListener так же не работает.

Deff 01.06.2013 20:51

Nexus,
Имхо на скок помню проблемными были общения именно с тегами <a>
какая то одна из моих закладок http://softlakecity.ru/browsers/firefox/greasemonkey - может что полезно...

Nexus 01.06.2013 20:56

Deff,
менял "<a></a>" на "<z></z>", "<span></span>" и т.п., ничего не вышло, событие не происходит.

Deff 01.06.2013 21:03

Nexus,
А поясните задачу... мож иными средствами можно проще решить?

Nexus 01.06.2013 22:06

Deff, Мне нужно сделать "настройки скрипта".
На странице скриптом создается ссылка и блок:
<a href="javascript://" id="option_open">Option</a>
<div style="display:none;" class="script_block">
	<div class="script_block_head">
		<div class="script_block_head_title"></div>
		<div class="script_block_head_close">Х</div>
	</div>
	<div class="script_block_body"></div>
</div>


Клик по #option_open, должен вызвать функцию, которая заполнит .script_block и поменяет его 'display' на ''.
Функция заполняет .script_block_body этим:

<div class="script_block_body">
	<div class="script_module_setting">
		<span class="script_tooltip">?</span>
		<!-- тут написано, что произвойдет при клике по одной из ссылок //-->
		<div>
			<a href="javascript://">1</a>
			<!-- 
				При клике по ссылке, значение переменной, 
				описанной в скрипте, должно измениться, 
				что изменит поведения скрипта 
			//-->
			<a href="javascript://">2</a>
			<a href="javascript://">3</a>
		</div>
	</div>
	<div class="script_module_setting"></div>
	<div class="script_module_setting"></div>
</div>

Deff 01.06.2013 22:15

Nexus,
Не, чуток не отсель

1. Почему GreaseMonkey: , а не bookmarklet , к примеру ?
или просто скрипт на странице ?

Nexus 01.06.2013 22:24

Deff, у меня нет доступа к изменяемой странице, а произвести определенные действия со страницей нужно, поэтому GM.

Deff 01.06.2013 22:26

Nexus,
bookmarklet тоже это может сделать http://ru.wikipedia.org/wiki/Букмарклет
Можно вставить страницу фреймом на свою страницу и все это открыть через анонимайзер, тогда скрипты на вашей странице будут работать с фреймом как с собственным

Nexus 01.06.2013 22:27

Deff, скрипт работает с несколькими страницами одного сайта, поэтому большинство переменных записываются в gm api (GM_setValue, GM_getValue).

Nexus 01.06.2013 22:31

Deff, "bookmarklet" в общем мне не подходит.

Deff 02.06.2013 00:08

Цитата:

Сообщение от Nexus
"bookmarklet" в общем мне не подходит.

Попробуйте кликнуть http://anonymouse.org/cgi-bin/anon-w.../pages/frame00

Пример установки библиотеки на чужой сайт через анонимайзер(она может быть произвольной, в том числе и Вашим АPI, библиотека автоустанавливается по новой и при переходе по ссылкам фрейма)
..
и считывание контента...(правда с программными кликами - тоже проблемы, - на анонимайзерах есть какая-никакая защита,
но мы можем навесить обработчики реального клика на элементы чужого сайта




на странице своего ресурса ( http://premod.mybb.ru/pages/frame00 )
ставим такой код
<script>

function TestLibFrame() {
  window.docThis = frame1.parent.document;
  window.$$ = frame1.jQuery;
  var str = 'Запускаем jQuery на  странице, ранее бывшей без библиотеки:';
  alert(str +'\n\n' + $$("html").html()) 

}

function Funk0(aa) {
var a='Cтавим javascript - библиотеку во фрейм'
var iframe = aa
var iframeDoc = iframe.contentWindow.document;
var b = iframeDoc.createElement('div');
b.innerHTML=a;
iframeDoc.body.appendChild(b);
var s = iframeDoc.createElement('script');
s.setAttribute("type","text/javascript");
s.src = "http://yandex.st/jquery/1.4.4/jquery.min.js";
s.onload = TestLibFrame;
b.appendChild(s);
}

</script>
<iframe width=100% height=1800  src="http://javascript.ru/forum/"  name=frame1 onload="Funk0(this)"></iframe>

Nexus 02.06.2013 15:16

Deff, а если этой страницей анонимайзера одновременно будет пользоваться несколько человек, их IP-адреса будут одинаковыми?

Deff 02.06.2013 17:22

Цитата:

Сообщение от Nexus
их IP-адреса будут одинаковыми?

Вряд ли - анонимайзеры используются для скрытия и по ним на тот же сайт ( тот жа ВК), заходят сотни пользователей

Чуть поправил код пост 16, убрал лишнее.

Nexus 02.06.2013 19:05

Цитата:

Сообщение от Deff
Вряд ли

Ты не уверен в ответе?

Спасибо за помощь, "bookmarklet" я вряд ли стану использовать, по крайней мере в ближайшем будущем.
Буду пробовать воплотить задуманное другими способами.

Всем спасибо за внимание, тему можно закрывать.

Deff 02.06.2013 19:09

Цитата:

Сообщение от Nexus
не уверен в ответе?

Nexus, проверить оч легко - вставьте во фрейм любой сайт теста IP, к примеру http://ipsee.ru/

Deff 03.06.2013 14:39

Цитата:

script.text = "("+ source +")()";
///


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