Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.09.2009, 12:54
Новичок на форуме
Отправить личное сообщение для msufx Посмотреть профиль Найти все сообщения от msufx
 
Регистрация: 18.09.2009
Сообщений: 4

Почему скрипт работает в IE6 и не работает в opera и IE8?
function createLink() {
  if (!validateMode()) return;
 
  var isA = getEl("A",document.getElementById('Composition')[].contentWindow.selection.createRange().parentElement());
  var str=prompt("Введите адрес:", isA ? isA.href : "http:\/\/");
 
  if ((str!=null) && (str!="http://")) {
    if (document.getElementById('Composition')[].contentWindow.selection.type=="None") {
      Composition.focus();
      var sel=document.getElementById('Composition')[].contentWindow.selection.createRange();
      sel.pasteHTML("<A HREF=\""+str+"\">"+str+"</A> ");
      sel.select();
    }
    else formatC("CreateLink",str);
  }
  else document.getElementById('Composition')[].focus();
}
 
function createBR() {
  if (!validateMode()) return;
  var sel=document.getElementById('Composition').selection.createRange();
      sel.pasteHTML("<br>");
      sel.select();
 Composition.focus();
}


<table border="1" cellpadding="0" cellspacing="0" width="100%" bordercolor='#C0C0C0' bordercolordark='#FFFFFF'><tr><td>
<IFRAME class=Composition id=Composition width="100%" height=400 frameborder=0 name="Composition">
</IFRAME>
</td></tr></table>

Пробовал менять
Composition.document.selection.createRange();
на
document.getElementById('Composition').selection.c reateRange();

Результата ни какого.
Ответить с цитированием
  #2 (permalink)  
Старый 18.09.2009, 16:19
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Геттер selection есть у объекта document, а не window.
По событию focus IE сбрасывает выделение.
Для других браузеров лучше использовать w3c-методы, подробнее здесь: http://fastcoder.org/articles/?aid=609

И не дублируйте темы.
Ответить с цитированием
  #3 (permalink)  
Старый 18.09.2009, 17:44
Новичок на форуме
Отправить личное сообщение для msufx Посмотреть профиль Найти все сообщения от msufx
 
Регистрация: 18.09.2009
Сообщений: 4

Спасибо за ответ и ссылочку.
Извиняюсь за дублёж, не знал как перепостить тему в другой раздел.
По сути вопроса:
изначально было так
Composition.document.selection.createRange()

Теперь попробую реализовать рекомендованными методами.
Ответить с цитированием
  #4 (permalink)  
Старый 18.09.2009, 17:55
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

var iframe = document.getElementById("Composition");
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;

var sel = iframeDocument.selection;

…
Ответить с цитированием
  #5 (permalink)  
Старый 18.09.2009, 18:18
Новичок на форуме
Отправить личное сообщение для msufx Посмотреть профиль Найти все сообщения от msufx
 
Регистрация: 18.09.2009
Сообщений: 4

Для простоты пробую на функции createBR()
Мне кажется, что не происходит вставки HTML кода
sel.pasteHTML("<br>");

Результат работы функции в Опере нулевой.
function createBR() {
  if (!validateMode()) return;
var iframe = document.getElementById("Composition");
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
 
var sel = iframeDocument.selection;
      sel.pasteHTML("<br>");
      sel.select();
 iframe.focus();
}


Например пример, приведённый ниже, работает.
function formatC(what,opt) {
  if (!validateMode()) return;
  
  if (opt=="removeFormat") {
    what=opt;
    opt=null;
  }
   Composition.focus();
  if (opt==null) Composition.document.execCommand(what);
  else Composition.document.execCommand(what,"",opt);
  
  pureText = false;
  Composition.focus();
}

<DIV language=javascript class=cout title=Жирный onclick="formatC('bold');"><IMG class=Ico src="images/bold.gif"> </DIV>
Ответить с цитированием
  #6 (permalink)  
Старый 18.09.2009, 18:24
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

pasteHTML — метод объекта TextRange, а не selection

function createBR() {
	if(!validateMode()) return;

	var iframe = document.getElementById("Composition");
	var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;

	var sel, range;

	if(браузер Internet Explorer) {
		sel = iframeDocument.selection;
		range = selection.createRange();
		range.pasteHTML("<br>");
		…
	} else {
		// для остальных браузеров
	}
}
Ответить с цитированием
  #7 (permalink)  
Старый 18.09.2009, 18:44
Новичок на форуме
Отправить личное сообщение для msufx Посмотреть профиль Найти все сообщения от msufx
 
Регистрация: 18.09.2009
Сообщений: 4

Читаю Вставка кода в текстовые поля для прочих браузеров, кроме ИЕ.
Только код слишком здоровый,вместо строчки в ИЕ.
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему не работает скрипт, подскажите aviaks Ваши сайты и скрипты 2 05.05.2009 14:38
Помогите! Почему в Opera js-код работает с ошибкой. В IE все нормально. maxonline Events/DOM/Window 4 21.11.2008 12:39
Скрипт не работает в Opera, Firefox Faster Events/DOM/Window 2 08.08.2008 18:56
Почему не работает скрипт? milvic Общие вопросы Javascript 3 03.03.2008 14:12