Вывод scrollTop вместо установки? - PullRequest
0 голосов
/ 09 ноября 2010

Я использую 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();
};

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

Ответы [ 2 ]

0 голосов
/ 09 ноября 2010

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

0 голосов
/ 09 ноября 2010

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

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

, где myscript.js - это действующий сценарий, который выполняет работу.Обязательно окружите все это (после "javascript:") фигурными скобками.

...