【发布时间】:2014-12-07 18:06:51
【问题描述】:
当用户触发某个keydown 事件时,我正在尝试制作一个 chrome 扩展来替换当前<textarea> 中键入的最后一个单词。所以我试过这个,但它并没有真正起作用。
这是我的扩展的文件:
我的分机manifest.json:
{
"name": "Test",
"description": "test",
"version": "0.0.1",
"permissions": [
"activeTab"
],
"background": {
"scripts": ["background.js"],
"persistent": false
},
"browser_action": {
"default_title": "replace test"
},
"manifest_version": 2
}
它的background.js:
chrome.tabs.executeScript(null, {file: "content_script.js"});
还有它的content_script.js:
document.onkeydown = replacePrevWord;
// Azerty: Ctrl + ²
// Qwerty: Ctrl + '
function KeyPress(e) {
var evtobj = window.event? event : e
if (evtobj.keyCode == 222 && evtobj.ctrlKey)
return true;
}
function getCaretPosition(ctrl) {
var CaretPos = 0; // IE Support
if (document.selection) {
ctrl.focus();
var Sel = document.selection.createRange();
Sel.moveStart('character', -ctrl.value.length);
CaretPos = Sel.text.length;
}
// Firefox support
else if (ctrl.selectionStart || ctrl.selectionStart == '0')
CaretPos = ctrl.selectionStart;
return (CaretPos);
}
function returnWord(text, caretPos) {
var index = text.indexOf(caretPos);
var preText = text.substring(0, caretPos);
if (preText.indexOf(" ") > 0) {
var words = preText.split(" ");
return words[words.length - 1]; //return last word
}
else {
return preText;
}
}
function replacePrevWord() {
if(KeyPress()){
var text = document.activeElement;
var caretPos = getCaretPosition(text)
var word = returnWord(text.value, caretPos);
if (word != null) {
text.value = text.value.replace(word,"replaced");
}
}
}
这在 JSFiddle (http://jsfiddle.net/cyo646cr/3/) 上运行良好,但我不知道如何在 Chrome 扩展程序中执行此操作。
有什么想法吗?
谢谢。
【问题讨论】:
-
如何获得
222KeyCode?当我查看此列表时:cambiaresearch.com/articles/15/javascript-char-codes-key-codes222是单引号。你想在哪个键上做一个动作?²? -
哦,我想我明白了...
Ctrl + '??该键确实适用于小提琴 -
我是 azerty 键盘上的法国人,我忘了 ² 在 qwerty 中不存在 ^^ 所以是的,它是 Ctrl + ' 给你的 ^^
-
不确定,但也许你可以使用 chrome.commands developer.chrome.com/extensions/commands
-
我已经尝试在清单上添加命令,但我从未触发过它们.. :/
标签: javascript jquery html google-chrome google-chrome-extension