问题:
我正在使用Chrome扩展程序,该扩展程序在按下按键时会阻止默认事件并插入4个空格字符。
我的代码 :(省略了不必要的东西,方法做了他们应该做的事情;我认为我不需要给出.setText
的方法定义等我使用的下面因为 正确)
value = this.getText();
var cursorPos, // current position of cursor (caret)
string; // string where content goes starts with four black spaces
// if contenteditable div
if (this.tagName === "DIV") {
cursorPos = getCaretPosition(this);
}
// normal textbox
else {
cursorPos = this.selectionStart;
}
var endString = value.substr(cursorPos),
startString = value.substr(0, cursorPos);
console.log(startString);
console.log(endString);
string = startString + " " + endString;
this.setText(string);
// 4 => number of whitespace in tab characters
var caretPos = startString.length + 4;
// if contenteditable div
if (this.tagName === "DIV") {
setCaretPosition(this, caretPos);
}
// normal textbox
else {
this.selectionStart = this.selectionEnd = caretPos;
}
它似乎正在做正确的事情,但它仍然不起作用。当我这样做时:
aa
^tab between two a's
当我得到a a
四个空格时,我得到a a
(一个空格)。
我见过很多解决方案(实际上是针对不同的问题),但没有解决方案。
请帮忙。谢谢!
答案 0 :(得分:1)
由于这个解决方案花了我很多时间(2天才算出来),我决定回答我的问题,以帮助将来可能遇到这个问题的人。该解决方案最终使用一个函数来检测我是否在gmail页面上,如果是,则用
替换空格。
// returns whether webpage is of gmail or not
function isGmail(){
return /mail\.google/.test(window.location.href);
}
value = this.getText();
var cursorPos, // current position of cursor (caret)
string; // string where content goes starts with four black spaces
// if contenteditable div
if (this.tagName === "DIV") {
cursorPos = getCaretPosition(this);
}
// normal textbox
else {
cursorPos = this.selectionStart;
}
// gmail case: replace ` ` with spaces
if (isGmail())
value = value.replace(/ /g, " ");
var endString = value.substr(cursorPos),
startString = value.substr(0, cursorPos);
console.log(startString);
console.log(endString);
string = startString + " " + endString;
// gmail case: replace spaces with ` `
if (isGmail())
string = string.replace(/ /g, " ");
this.setText(string);
// ... code skipped
感谢您的观看!