scrollTop Вывод вместо настройки?

Я использую JavaScript из http://snippets.dzone.com/posts/show/4973 и предложение scrollTop под ним, чтобы создать букмарклет для вставки предварительно заданной строки текста в новое сообщение Blogger textarea. Код выглядит так:

//IE support
if (document.selection) {
    myField.focus();

    //in effect we are creating a text range with zero
    //length at the cursor location and replacing it
    //with myValue
    sel = document.selection.createRange();
    sel.text = myValue;

//Mozilla/Firefox/Netscape 7+ support
} else if (myField.selectionStart || myField.selectionStart == '0') {

    myField.focus();
    //Here we get the start and end points of the
    //selection. Then we create substrings up to the
    //start of the selection and from the end point
    //of the selection to the end of the field value.
    //Then we concatenate the first substring, myValue,
    //and the second substring to get the new value.
    var startPos = myField.selectionStart;
    var endPos = myField.selectionEnd;
    myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length);
    myField.setSelectionRange(endPos+myValue.length, endPos+myValue.length);
} else {
    myField.value += myValue;
}

}

И предложение ниже:

//add this to the start of function
textAreaScrollPosition = myField.scrollTop;

//add this to end of the function
myField.scrollTop = textAreaScrollPosition;

Предложение scrollTop не работает в Firefox, вместо этого текущая страница в браузере заменяется значением textAreaScrollPosition.

Я добавил это в начало зажатой версии для букмарклета:

javascript:var myField=document.getElementById('postingHtmlBox');var myValue='lol';

В целом это гласит:

javascript:var myField=document.getElementById('postingHtmlBox');
var myValue='lol';
var textAreaScrollPosition=myField.scrollTop;
if(document.selection){myField.focus();
sel=document.selection.createRange();
sel.text=myValue;
}else if(myField.selectionStart||myField.selectionStart=='0'){myField.focus();
var startPos=myField.selectionStart;
var endPos=myField.selectionEnd;
myField.value=myField.value.substring(0,startPos)+myValue+myField.value.substring(endPos,myField.value.length);
myField.setSelectionRange(endPos+myValue.length,endPos+myValue.length);
}else{myField.value+=myValue;
}myField.scrollTop=textAreaScrollPosition;

Однако без разрывов строк.

Я меньше, чем мастер JS. Я просто пытаюсь помочь другу, не являющемуся техническим специалистом, сделать с Blogger что-то немного сложное. Любые идеи?

РЕДАКТИРОВАТЬ: Помимо добавления примитивного обнаружения страницы и замены предустановленного текста окном подсказки, я смог решить исходную проблему, добавив myField.focus(); в конец:

javascript:if(document.getElementById('postingHtmlBox')){var myField=document.getElementById('postingHtmlBox');
var myValue=prompt('Insert text here.');
var textAreaScrollPosition=myField.scrollTop;
if(document.selection){myField.focus();
sel=document.selection.createRange();
sel.text=myValue;
}else if(myField.selectionStart||myField.selectionStart=='0'){myField.focus();
var startPos=myField.selectionStart;
var endPos=myField.selectionEnd;
myField.value=myField.value.substring(0,startPos)+myValue+myField.value.substring(endPos,myField.value.length);
myField.setSelectionRange(endPos+myValue.length,endPos+myValue.length);
}else{myField.value+=myValue;
}myField.scrollTop=textAreaScrollPosition;
myField.focus();
};

Не уверен, нужна ли последняя точка с запятой или нет, ну да ладно, решения!


person CartoonChess    schedule 08.11.2010    source источник


Ответы (2)


Возможно, ваш букмарклет слишком длинный, чтобы уместиться в закладке. Как вариант, можно использовать динамический тег скрипта:

javascript:document.body.appendChild(document.createElement('script')).setAttribute('src','http://mysite/myscript.js')

Где myscript.js - это фактический скрипт, выполняющий работу.

Если вы сохраните его как отдельный букмарклет, обязательно заключите его (после «javascript:») в фигурные скобки.

person rob    schedule 08.11.2010
comment
Один совет: в целях разработки измените URL-адрес скрипта с http: //...whatever.js на http: //...whatever.js? + Math.random () .... так как это гарантирует, что вы всегда получайте последнюю версию файла. Вы обнаружите, что это значительно упрощает разработку букмарклетов, потому что вам не всегда нужно редактировать саму закладку, просто редактируйте файл на веб-сервере. Если, когда вы закончите, вы можете сжать вещь в автономную закладку, круто, если нет, придерживайтесь размещенной версии. - person rob; 09.11.2010
comment
Спасибо, Роб. До сих пор я не знал об этом методе. Я попробовал проверить длину, уменьшив букмарклет до следующего: ... javascript: var myField = document.getElementById ('postingHtmlBox'); var textAreaScrollPosition = myField.scrollTop; myField.scrollTop = textAreaScrollPosition; ... К сожалению, возникает такая же ошибка. - person CartoonChess; 09.11.2010
comment
Отредактировал мой ответ выше. Кажется, проблема заключается в отсутствии фигурных скобок ... Я думаю, что это необходимо, если вы объявляете переменные в букмарклете. - person rob; 09.11.2010

Согласно отредактированному вопросу, добавление myField.focus(); в конец решило проблему.

person CartoonChess    schedule 09.11.2010