Как вы определяете HTML нажал с JavaScript? - PullRequest
1 голос
/ 18 октября 2008

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

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

Ответы [ 7 ]

4 голосов
/ 18 октября 2008

Используя jQuery, вы можете установить контекст вашего выбора. т.е.

$ ('a', $ ('# iframe-id')). Click (function () {...});

Затем можно реализовать обработчик событий, который будет обрабатывать щелчки гиперссылок iFrame. Свойство "this" в обработчике позволит вам запросить гиперссылку и получить такие свойства, как innerText и т. Д.

1 голос
/ 18 октября 2008

вам нужно поставить событие на каждую ссылку, и тогда вы получите всю информацию о конкретном клике.

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

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

$ ("a"). Click (function () { оповещения ( '') });

getElementsByTagName ("a") - выдаст вам все ссылки на странице.

0 голосов
/ 20 октября 2008

Хорошее решение, чтобы выяснить, по какому элементу щелкнули, - использовать делегирование события . Если вы присоединяете прослушиватель событий к каждому элементу с помощью цикла (поверх 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, просто используйте iframe contentDocument вместо документа.

0 голосов
/ 18 октября 2008

Вы можете внедрить код в 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>

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

0 голосов
/ 18 октября 2008

Я думаю, это должно быть возможно. Содержимое IFrame доступно из внешнего документа (страницы, на которой встроен iframe), поэтому вы сможете добавить обработчики событий (см. Другие ответы) в эти элементы после загрузки iframe.

См. Также Википедия по Iframe , в которой приведены некоторые примеры и структуры, которые фактически работают с контентом в IFrame.

0 голосов
/ 18 октября 2008

Что тебе нужно? -)

Если у вас есть iframe, который вы используете в качестве цели для ссылок, вы должны выполнить некоторую обработку на стороне сервера или добавить что-то в URL ссылок, которые вы можете прочитать при загрузке страницы ...

Но для определения времени загрузки страницы требуется скрипт на странице, который находится внутри iframe, или функция, которая через короткие промежутки времени проверяет наличие элементов на странице в iframe ...

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

0 голосов
/ 18 октября 2008

Я только что подумал о решении, будет ли это работать, или есть другие варианты?

Решение состоит в том, чтобы прокси-содержимое содержимого страницы iframe soruce, заменив href на код, вызывающий функцию javascript, которая идентифицирует, на каком href был нажат.

Это может быть использовано в сочетании с меткой щелчка, чтобы точно пометить ссылку.

Это также означало бы, что исходный источник вообще не нужно менять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...