Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как поместить курсор в IFrame в Opera (https://javascript.ru/forum/dom-window/12668-kak-pomestit-kursor-v-iframe-v-opera.html)

mcfly 28.10.2010 10:33

Как поместить курсор в IFrame в Opera
 
Добрый день.

Написал функцию установки курсора в iframe. Но она, к содалению, не пашет в Opera.

function сursorGoTo(pos)
{
  var isGecko = navigator.userAgent.toLowerCase().indexOf("gecko") != -1;
  var iframe = (isGecko) ? document.getElementById("frameId") : frames["frameId"];
  var iDoc = (isGecko) ? iframe.contentDocument : iframe.document;

  iframe.focus();

  if(!isGecko)
  {
    var oRange = iDoc.body.createTextRange();
    oRange.move("character", pos);
    oRange.select();
  }
  else
  {
    DocumentSelection.setRange(iframe, pos, pos);
  }
}


Подскажите пожалуйста, что я сделал неправильно.

subzey 28.10.2010 13:25

Движок Оперы не Gecko, а Presto.
Вы проверяете не то, что браузер умеет, а то, какой он. Такая дискриминация по юзер-агенту до добра не доводит.

mcfly 28.10.2010 13:48

Цитата:

Сообщение от subzey (Сообщение 76292)
Движок Оперы не Gecko, а Presto.
Вы проверяете не то, что браузер умеет, а то, какой он. Такая дискриминация по юзер-агенту до добра не доводит.

Вы, наверно, не заметили if(!isGecko) - означает "Если не Gecko".
Пофик, сделаю проверку по имени браузера :)

Какой код должен быть для оперы?

Заранее спасибо :)

subzey 28.10.2010 14:24

Более развернуто: не используйте определение возможностей браузера по его имени, движку и прочей номенклатуре. Проверяйте то, что хотите использовать.

Например:
if (document.addEventListener) /* ... */ else if (document.attachEvent) /* ... */ else /* ... */


Казалось бы, можно проще: раз IE, значит, attachEvent, иначе addEventListener. Но в IE9 уже есть поддержка addEventListener, и вот тут нестыковка, вроде, и IE, а, вроде и нужое умеет.

Или, к примеру, Вы подключаете библиотеку XPath на IE, а другой скрипт не хочет ее использовать, мотивируя это тем, что не может же быть XPath в IE!

mcfly 28.10.2010 15:01

Про это понятно. Но, все же, я о другом спрашивал: Как поставить в опере курсор в iframe, в указанную позицию?

Kolyaj 29.10.2010 09:43

Цитата:

Сообщение от subzey
Казалось бы, можно проще: раз IE, значит, attachEvent, иначе addEventListener. Но в IE9 уже есть поддержка addEventListener, и вот тут нестыковка, вроде, и IE, а, вроде и нужое умеет.

Есть более прикольные вещи. В IE8, например, есть нативная поддержка JSON. Но если IE8 метатегом сбрасывается в режим эмуляции IE7 или на странице нет doctype, то поддержки JSON нет.

mcfly 29.10.2010 09:59

Народ, 3 сообщения от пользователей с крутейшей каромй и все, можно сказать, офтопик.

Сабж: Как поставить в опере курсор в iframe, в указанную позицию?

2de 29.10.2010 15:43

Незнаю зачем вам там курсор, но насколько я знаю курсор можно поставить только в поле ввода.

У меня есть 2 идеи но это так мысли вслух.

1-я есть у IFrame свойсвто designMode которое использую визивиг редакторы так вот активировав этот режим и сделав активным фрэйм получим там курсор, останется только ЦСС установить оступ.

2-я банально в тело фрэйма вставить textarea и заскинить ЦСС так что бы она вписывалась в общую картину (убрать паддинг и бордер) оступ опять же выставить ЦССом.

Вот и всё, так как я не понял зачем курсор поэтому такие и идеи, просьба сильно не ругать.

Kolyaj 29.10.2010 15:59

mcfly,
я точно не знаю, но что-то мне подсказывает, что ваша функция для Gecko на самом деле должна выполняться для всех браузеров, кроме IE.

mcfly 29.10.2010 16:20

Цитата:

Сообщение от Kolyaj (Сообщение 76484)
mcfly,
я точно не знаю, но что-то мне подсказывает, что ваша функция для Gecko на самом деле должна выполняться для всех браузеров, кроме IE.

Сам удивлен, но пашет везде, кроме Оперы. Могу выложить текст хтмлки, чтобы протестить можно было


Часовой пояс GMT +3, время: 18:02.