2015-05-22 2 views
1

Я пытаюсь использовать чистый Javascript (без jQuery) для прокрутки каждого iframe на странице, а затем проверить, содержит ли какой-либо из iframes выделенный (выделенный) текст. Затем отобразите предупреждение, показывающее выделенный текст. Кикер - это ... идентификаторы iframe не будут известны заранее. Следовательно, необходимо выполнить цикл через каждый iframe. FYI - iframe все находятся в одном домене, поэтому здесь нет проблем с междоменными доменами.Получение выделенного текста внутри любого iframe на странице

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

На странице загрузки, я это делаю ...

var iframes = document.getElementsByTagName('iframe'); 
for (var i = 0; i < iframes.length; i++) { 
    iframes[i].contentWindow.document.onmouseup = function() { 
     var iframeSelection = iframes[i].contentWindow.document.getSelection(); 
     if (iframeSelection.toString().length > 0) { alert(iframeSelection); } 
    } 
} 

Также ... для этого конкретного проекта, он должен работать только в Chrome.

Спасибо!

+0

Попробуйте без "contentWindow": EX вар iframeSelection = плавающие фреймы [я] .document.getSelection(); Кроме того, я считаю, что вам нужно запустить getSelection в «окне» вместо документа. – Bioto

+0

Спасибо, но это не проблема, потому что я уже (успешно) тестировал получение выделенного текста внутри * single * iframe с помощью getElementById (при использовании contentWindow, document и т. Д.). Просто не могу понять, как это сделать, когда на странице есть _multiple_ iframes. – JustAnotherCoder

ответ

0

Ваш IFrame и выбор кода это хорошо, но вы работаете в common JavaScript mistake с for петель - i всегда будет равна iframes.length по времени функция обработчик события запуска.

Вы можете избежать этого переборе с Array.prototype.forEach:

var iframes = document.getElementsByTagName('iframe'); 

[].forEach.call(iframes, function(frame) { 
    frame.contentWindow.document.onmouseup = function() { 
     var iframeSelection = frame.contentWindow.getSelection(); 
     if (iframeSelection.toString().length > 0) { alert(iframeSelection); } 
    } 
}); 

JSBin

+0

Я бы никогда не подумал об этом сам. Большое спасибо joews ... отлично работает! :) – JustAnotherCoder

Смежные вопросы