Показать сообщение отдельно
  #2 (permalink)  
Старый 11.11.2016, 14:49
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,588

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

Тут ты устанавливаешь вызов функции текстом. Текст ничего не знает о функциях, он просто текст.
Соответственно, когда юзер кликает на такую ссылку (*утирировано*) браузер преобразует текст в код в контексте страницы и пытается вызвать функцию по её имени. Но на самой странице такой функции нет, функция твоего скрипта скрыта от станицы(иначе могли бы быть атаки на привилегированный код со стороны страницы).
Нужные функции надо назначать явно, например:
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <script type="text/javascript">
function reply_guild(action, sign) // Обработчик ссылок(при переходе по ним)
{
  alert('/bla-bla.php?action=' + action + '&sign=' + sign) // Вывести оригинальную ссылку
}

function main()
{
  var list = document.querySelectorAll('a')   // Найти все ссылки(все две)
  var ref = list[0].href                      // Получить адрес ссылки
  var sign = ref.substring(ref.indexOf('&sign=') + 6, ref.length) // Получить хэш в конце ссылок(у обоих он одинаков)

  list[0].addEventListener('click', function(event){
      event.preventDefault();
      reply_guild('accept', sign);
  }, false)
  list[1].addEventListener('click', function(event){ //назначить обработчик на нажатие
      event.preventDefault(); //предотвратить переход по ссылке
      reply_guild('skip', sign); //выполнить функцию с нужными параметрами
  }, false)
}
document.addEventListener('DOMContentLoaded', main) // Вызвать функцию после постройки DOM
        </script>
    </head>
    <body>
        <center>
            <a href="/bla-bla.php?action=accept&sign=40f45705adc40e6d9510addd79473bd0">Принять</a>
            <br>
            <a href="/bla-bla.php?action=skip&sign=40f45705adc40e6d9510addd79473bd0">Отказаться</a>
        </center>
    </body>
</html>
__________________
29375, 35

Последний раз редактировалось Aetae, 11.11.2016 в 14:52.
Ответить с цитированием