J'utilise du code JavaScript de http://snippets.dzone.com/posts/show/4973 et la suggestion scrollTop
ci-dessous, pour créer un bookmarklet permettant d'insérer une chaîne de texte prédéfinie dans le nouveau message de Blogger textarea
. Le code ressemble à ceci:scrollTop Sortir plutôt que de définir?
//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;
}
}
Et la suggestion ci-dessous:
//add this to the start of function
textAreaScrollPosition = myField.scrollTop;
//add this to end of the function
myField.scrollTop = textAreaScrollPosition;
La suggestion scrollTop
échoue dans Firefox, remplaçant à la place de la page en cours dans le navigateur avec la valeur de textAreaScrollPosition
.
Je a ajouté à l'avant de la version prise en sandwich vers le bas pour le bookmarklet:
javascript:var myField=document.getElementById('postingHtmlBox');var myValue='lol';
Au total, il lit:
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;
Sans sauts de ligne, cependant.
Je suis moins qu'un assistant JS. J'essaie juste d'aider un ami non-tech à faire quelque chose de complexe avec Blogger. Des idées?
EDIT: En plus d'ajouter la détection de la page primitive et de remplacer le texte prédéfini avec une boîte rapide, j'ai pu résoudre le problème d'origine en ajoutant myField.focus();
à la fin:
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();
};
Je ne sais pas si ce dernier point-virgule est strictement nécessaire ou pas, mais bon, des solutions!
Un conseil: à des fins de développement, remplacez l'URL de script "http: //...whatever.js" par "http: //...whatever.js?" + Math.random() ... Comme cela, vous obtiendrez toujours la dernière version du fichier. Vous constaterez que cela facilite grandement le développement de bookmarklets, car vous n'avez pas toujours besoin d'éditer le signet lui-même, il suffit d'éditer un fichier sur un serveur web. Si, lorsque vous avez terminé, vous pouvez compacter la chose dans un signet autonome, cool, sinon, s'en tenir à la version hébergée. – rob
Merci, rob. Je n'étais pas au courant de cette méthode jusqu'à maintenant. J'ai essayé de tester la longueur en réduisant le bookmarklet à ceci: ... javascript: var myField = document.getElementById ('postingHtmlBox'); var textAreaScrollPosition = monField.scrollTop; myField.scrollTop = textAreaScrollPosition; ... Malheureusement, la même erreur se produit. – CartoonChess
Édité ma réponse ci-dessus. Le manque d'accolades semble être le problème ... Je pense que c'est nécessaire si vous déclarez des variables dans un bookmarklet. – rob