Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Изменить href ссылки.
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » Изменить href ссылки.

Страниц (2): [1] 2 »
 

1. Dezmont - 18 Ноября, 2012 - 13:33:33 - перейти к сообщению
Добрый день. Пытаюсь написать скрипт, чтобы он менял href тега <a>.
Проблема в том, что на сайте используются hash-данные (ну или как там они называются).
В общем URL изначально выглядит вот так: www.site.ru/home/name.
При клике по закладкам, которые есть на странице, он меняется вот так: www.site.ru/home/name/#section.tasks, www[dot]site[dot]ru/home/name/#section[dot]settings и т.д.
Когда через Greasemonkey прикручиваю скрипт к странице, то он ничего не меняет.
На главной странице (www.site.ru/home/name) выглядит вот так:
CODE (html):
скопировать код в буфер обмена
  1. <a href="#" id="icalendareventslista">

На странице www[dot]site[dot]ru/home/name/#section[dot]tasks JS, который на сайте меняет код вот так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <a href="webcal://www.site.ru/icalendar/name/29096485/?tok=eJwNyzkOAzEIAMAXWTIGDDwHDEiRchTZKq-PTj8kwb7kQMvEQshaAI3pXIclCNeuqUvZStnD209ELWneiyN1ZP1en-c1no-vNZZN26Q8QtTMZTZuro3eaX3s-jETDFVJHMAymqyKgkh4VyDfDRPwD9E3KtA" id="icalendarlista">


Я вставляю такой код в greasemonkey:
CODE (javascript):
скопировать код в буфер обмена
  1. var iCal = document.getElementById('icalendareventslista').href;
  2. var date = new Date().valueOf();
  3. document.getElementById('icalendareventslista').href = iCal + '&' + date;

Но что-то ничего не работает. (((
Подскажите куда копать.
2. EuGen - 18 Ноября, 2012 - 14:17:58 - перейти к сообщению
CODE (html):
скопировать код в буфер обмена
  1. <a id="icalendareventslista" href="webcal://www.site.ru/icalendar/name/29096485/?tok=eJwNyzkOAzEIAMAXWTIGDDwHDEiRchTZKq-PTj8kwb7kQMvEQshaAI3pXIclCNeuqUvZStnD209ELWneiyN1ZP1en-c1no-vNZZN26Q8QtTMZTZuro3eaX3s-jETDFVJHMAymqyKgkh4VyDfDRPwD9E3KtA">LINK!</a>
  2.  

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. <script type='text/javascript'>
  3. var iCal = document.getElementById('icalendareventslista').href;
  4. var date = new Date().valueOf();
  5. document.getElementById('icalendareventslista').href = iCal + '&' + date;
  6. //alert(document.getElementById('icalendareventslista').href);
  7. </script>

?
3. Dezmont - 18 Ноября, 2012 - 14:37:35 - перейти к сообщению
Что-то я не понял... Ничего ж не поменялось?

alert на странице www[dot]site[dot]ru/home/name/#section[dot]tasks выдаёт www[dot]site[dot]ru/home/name/#&1356833983

Так то по-идее код правильный, но из-за того что при переходе по вкладкам на сайте они генерирются с помощью JS, ничего не получается.
Если запускать скрипт через адресную строку на уже сгенерированной странице, то всё нормально работает. (
4. Dezmont - 19 Ноября, 2012 - 20:18:53 - перейти к сообщению
Хееееееелп.))) Больше ни у кого идей нет? (
5. armancho7777777 - 19 Ноября, 2012 - 20:36:32 - перейти к сообщению
Dezmont пишет:
они генерирются с помощью JS

Они у Вас сами по себе генирируются?
6. EuGen - 19 Ноября, 2012 - 21:37:22 - перейти к сообщению
Dezmont пишет:
Что-то я не понял... Ничего ж не поменялось?

Поменялось. Во-первых, закрыт тег <a> и во-вторых, id корректно указан.
7. Dezmont - 19 Ноября, 2012 - 21:38:57 - перейти к сообщению
armancho7777777 пишет:
Они у Вас сами по себе генирируются?

Честно, не в курсе. Про hash данные в интернете нагуглил только, и понял, что js в зависимости от них страницу дополняет.

http://www[dot]rememberthemilk[dot]com/
Вот там если зарегистрироваться или с помощью гуглуаккаунта войти, можно посмотреть. Сверху страницы сссылки, при нажатии на которые в адресной строке страница изменяется
CODE (htmlphp):
скопировать код в буфер обмена
  1. http://www.rememberthemilk.com/home/dezmont/
  2. http://www.rememberthemilk.com/home/dezmont/#section.tasks
  3. http://www.rememberthemilk.com/home/dezmont/#section.settings

И так далее.
Т.е. 1-я страница нормально генерируется, а последующие уже дополняют данными открытый шаблон.
(Добавление)
EuGen пишет:
Поменялось. Во-первых, закрыт тег <a> и во-вторых, id корректно указан.

Ой. Извините, на html даже не посмотрел.
8. DlTA - 19 Ноября, 2012 - 21:44:53 - перейти к сообщению
может не тот элемент выбрали, может на странице несколько элементов с таким id и вы смотрите на второй
9. Dezmont - 19 Ноября, 2012 - 21:46:11 - перейти к сообщению
Может я и неверно предполагаю, но это единственное, что думается.
Может в скрипте можно как-нибудь прописать, чтобы он следил за изменением параметра href тега a (после загрузки страницы) и при положительном результате совершал необходимые действия. Либо проверял бы hreaf a в соответствии с регуляркой.
Просто реализовать не знаю как, нужно изучать язык. (
10. DlTA - 19 Ноября, 2012 - 21:46:32 - перейти к сообщению
попробуйте в хроме
CODE (javascript):
скопировать код в буфер обмена
  1. console.log(document.getElementById('icalendareventslista'));

при этом в консоле должен появиться html найденного элемента, и при наведении на это html тот же объект на странице будет подсвечен
11. Dezmont - 19 Ноября, 2012 - 21:49:56 - перейти к сообщению
DlTA пишет:
ожет не тот элемент выбрали, может на странице несколько элементов с таким id и вы смотрите на второй

Нет. Элемент верный. Всё выполняется нормально просто дело в этих hash данных, которые идут после #. И в способе генерации страницы.Если даже напрямую в браузере набираешь http://www.rememberthemilk.com/home/dezmont/#section.tasks, то тебя сначала кидает на главную страницу (http://www.rememberthemilk.com/home/dezmon), а потом скрипт обрабатывает данные и выдаёт страницу.
(Добавление)
DlTA пишет:
попробуйте в хроме
CODE (javascript):
скопировать код в буфер обмена
console.log(document.getElementById('icalendareventslista'));

при этом в консоле должен появиться html найденного элемента, и при наведении на это html тот же объект на странице будет подсвечен

Это нужно выполнить в адресной строке, на нужной странице, предварительно введя javascript:? Если так, то результат у меня нулевой.
А если ввожу в адресной строке:
CODE (javascript):
скопировать код в буфер обмена
  1. javascript:
  2. var iCal = document.getElementById('icalendareventslista').href;
  3. var date = new Date().valueOf();
  4. document.getElementById('icalendareventslista').href = iCal + '&' + date;

То в результате получаю алерт с необходимой мне ссылкой.
12. DlTA - 19 Ноября, 2012 - 21:57:17 - перейти к сообщению
...

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

вообще в той же мозили посмотрите что за запросы происходят при подгрузке страницы
13. Dezmont - 19 Ноября, 2012 - 21:58:05 - перейти к сообщению
Упс. Извиняюсь за нубство. Прочитал про console.log.
Выполнение команды мне выдало ссылку мою.
14. DlTA - 19 Ноября, 2012 - 21:59:51 - перейти к сообщению
Dezmont пишет:
Это нужно выполнить в адресной строке,

F12 последняя вкладка консоль
и там уже лабать
15. Dezmont - 19 Ноября, 2012 - 22:00:24 - перейти к сообщению
DlTA пишет:
и где нить на странице есть скриптик, который по этим якорям делает дополнительный запрос для подгрузки контента

Вот вот. Теперь бы додуматься, как бы мне отследить изменение ссылки? Может можно каждую секунду проверять, есть ли необходимая ссылка, и изменять её, если она соответствует регулярке. Ну или какой-нибудь подобный метод? Может есть какие-нибудь идеи?
Гугл выдал hashchange. Может подойдёт?

 

Powered by ExBB FM 1.0 RC1