Суть проблемы. В расширении для выделения кода по клику используется js-код:
- Код: Выделить всё
function codebox_plus_toggle(a, tmp)
{
if (tmp)
{
var e = a.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0];
}
else
{
var e = a.parentNode.parentNode.getElementsByTagName('dd')[0];
}
if (e.style.display == 'none')
{
e.style.display = 'inline';
}
else
{
e.style.display = 'none';
}
}
function codebox_plus_select(a, tmp)
{
if (tmp)
{
var e = a.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0];
}
else
{
var e = a.parentNode.parentNode.getElementsByTagName('dd')[0];
}
// Not IE and IE9+
if (window.getSelection)
{
var s = window.getSelection();
// Safari
if (s.setBaseAndExtent)
{
s.setBaseAndExtent(e, 0, e, e.innerText.length - 1);
}
// Firefox and Opera
else
{
// workaround for bug # 42885
if (window.opera && e.innerHTML.substring(e.innerHTML.length - 4) == '<br>')
{
e.innerHTML = e.innerHTML + ' ';
}
var r = document.createRange();
r.selectNodeContents(e);
s.removeAllRanges();
s.addRange(r);
}
}
// Some older browsers
else if (document.getSelection)
{
var s = document.getSelection();
var r = document.createRange();
r.selectNodeContents(e);
s.removeAllRanges();
s.addRange(r);
}
// IE
else if (document.selection)
{
var r = document.body.createTextRange();
r.moveToElementText(e);
r.select();
}
}
- Код: Выделить всё
Uncaught DOMException: Failed to execute 'setBaseAndExtent' on 'Selection': There is no child at offset 51.
- Код: Выделить всё
if (s.setBaseAndExtent)
{
s.setBaseAndExtent(e, 0, e, e.innerText.length - 1); //ТУТ
}
Пожалуйста, помогите решить проблему. На форуме родное выделение как работает? Может заменить на родное?
Добавлено спустя 2 часа 27 минут:
Посте упорного гугления нашёл (нашёл ли?) решение. Привел кусок кода, где была ошибка к такому виду:
- Код: Выделить всё
if (s.setBaseAndExtent[0]) //Тут подставил нулевой лемент
{
s.setBaseAndExtent(e, 0, e, e.innerText.length - 1); //ТУТ была ошибка, по мнению браузера
}
Хотя браузер перестал ругаться и код стал выделяться, задаю вопрос к знатокам. Правильно ли я сделал?
З.Ы. Доделаю перевод и выложу расширение в мастерскую. Уж больно шикарное расширение. Подсвечивает х.тучу языков