Возможно ли с помощью Javascript или какой-либо другой технологии определить, на какую гиперссылку щелкнул пользователь, без изменения исходного кода гиперссылки.
Например: Можете ли вы щелкнуть кнопку «тег», а затем щелкнуть гиперссылку, размещенную в другом iframe, и иметь возможность вычислить, по какой гиперссылке щелкнул пользователь, без изменения какого-либо исходного кода в этом iframe?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


вам нужно поставить событие на каждую ссылку, и тогда вы получите всю информацию о конкретном клике.
это будет работать только в каком-то документе, поэтому, если вы попытаетесь провести тест между ссылкой внутри iframe и ссылкой на вашей странице, вы не получите событие для ссылки iframe.
чтобы прикрепить событие ко всем ссылкам, которые необходимо запустить по всем ссылкам на странице, лучший способ сделать это - использовать селектор jQuery. или другой js-фреймворк, например YUI
$ ("a"). click (function () { тревога('') });
getElementsByTagName ("a") - предоставит вам все ссылки на странице.
Используя jQuery, вы можете установить контекст вашего выбора. т.е.
$ ('a', $ ('# iframe-id')). click (function () {...});
Затем вы можете реализовать обработчик событий, который будет обрабатывать щелчки гиперссылок iFrame. Свойство "это" в обработчике позволит вам запросить гиперссылку и получить такие свойства, как innerText и т. д.
Я просто подумал о решении, это сработает или есть другие варианты?
Решением было бы проксировать содержимое страницы iframe soruce, заменив href кодом для вызова функции javascript, которая будет определять, на какой href был сделан щелчок.
Затем это можно было бы использовать в сочетании с тегом click, чтобы точно пометить ссылку.
Это также означало бы, что исходный источник вообще не нужно менять.
Что вам нужно ?-)
Если у вас есть iframe, который вы используете в качестве цели для ссылок, вы должны выполнить некоторую обработку на стороне сервера или добавить что-то в URL-адрес ссылок, что вы можете прочитать при загрузке страницы ...
Но для определения времени загрузки страницы требуется скрипт на странице, который находится внутри iframe, или функция, которая проверяет доступность элементов на странице в iframe через короткие промежутки времени ...
- но вы можете добиться успеха только в том случае, если страница поступает из того же домена, что и главная страница, поскольку междоменные сценарии незаконны и, следовательно, невозможны! -)
Я думаю, это должно быть возможно. Содержимое IFrame доступно из внешнего документа (страницы, в которую встроен iframe), поэтому вы должны иметь возможность добавлять обработчики событий (см. Другие ответы) для этих элементов после загрузки iframe.
См. Также Википедия на Iframe, в котором приведены некоторые примеры и фреймворки, которые действительно работают с контентом в IFrame.
Вы можете внедрить код в iframe, но только если этот iframe находится в том же домене, что и страница, с которой вы вводите, по очевидным причинам безопасности.
<iframe id = "framedpage" src = "framedpage.html"></iframe>
<button type = "button" id = "tagbutton">Tag</button>
<script type = "text/javascript">
function framedclicks_bind() {
var f= document.getElementById('framedpage');
var fdoc= f.contentDocument;
if (!fdoc) fdoc= f.contentWindow.document; // for IE
if (fdoc)
for (var i= fdoc.links.length; i-->0;)
fdoc.links[i].onclick= framedclicks_click; // bind to all links
}
function framedclicks_click() {
alert('You clicked on '+this.href);
return false; // don't follow link
}
document.getElementById('tagbutton').onclick= framedclicks_bind;
</script>
Может потребоваться очистка в зависимости от потребностей приложения (например, чтобы гарантировать, что фрейм всегда загружается перед попыткой привязки, или что может произойти отмена привязки, или что любые щелчки из исходных ссылок запоминаются), но это будет общий форма вещей.
Хорошее решение, чтобы узнать, какой элемент был нажат, - использовать делегирование мероприятия. Если вы прикрепите прослушиватель событий к каждому элементу с помощью цикла (через document.links или document.getElementsByTagName), у вас возникнут две проблемы: - у браузера есть много слушателей, которые нужно поддерживать - события прикрепляются только к элементам, которые были в DOM, когда вы вызывали цикл; любой элемент, динамически добавленный позже, не имеет прослушивателя событий.
Простой пример делегирования событий:
document.onclick = function(e){
e = e || window.event;
var t = e.target || e.srcElement;
if (t.nodeName=='A'){
alert( t.href );
}
}
Если вы хотите найти ссылку внутри iframe, просто используйте contentDocument iframe вместо документа.
Тебе это не нужно. Ваша страница может редактировать содержимое IFrame.