Применить «onclick» ко всем элементам в iFrame - PullRequest
0 голосов
/ 16 апреля 2009

Как использовать JavaScript DOM для применения onclick событий к ссылкам внутри iframe?

Вот то, что я пытаюсь, это не работает:

document.getElementById('myIframe').contentDocument.getElementsByTagName('a').onclick = function();

Кажется, что нет никаких ошибок, и я полностью контролирую вещи в iframe.

Вот некоторый код, чтобы проверить и посмотреть, смогу ли я хотя бы подсчитать, сколько div в моем iframe.

// access body
var docBody = document.getElementsByTagName("body")[0];

// create and load iframe element
var embed_results = document.createElement('iframe');
embed_results.id = "myIframe";
embed_results.setAttribute("src", "http://www.mysite.com/syndication/php/embed.php");

// append to body
docBody.appendChild(embed_results);

// count the divs in iframe and alert   
alert(document.getElementById("myIframe").contentDocument.getElementsByTagName('div').length);

Ответы [ 2 ]

7 голосов
/ 16 апреля 2009

iFrame может получать контент с другого веб-сайта в другом домене.

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

По этой причине вы не можете прикреплять события на своей странице к контенту в iFrame.

3 голосов
/ 16 апреля 2009

getElementsByTagName возвращает NodeCollection, поэтому вы должны выполнить итерацию по этой коллекции и добавить обработчик onclick для каждого узла в этой коллекции. Код ниже должен работать.

var links = document.getElementById('myIframe').contentDocument.getElementsByTagName('a');
for(var i=0;i<links.length;++i)links[i].onclick=function(){}

также убедитесь, что вы запускаете этот код после загрузки содержимого фрейма

embed_results.onload=function(){
   // your code
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...