使用Chrome扩展在Facebook等网站中插入字符
我创建了一个chrome扩展,允许用户在文本框中右键单击,并插入特殊字符。这在StackOverflow等许多网站上都有效,但在Facebook等网站上不起作用。这是因为Facebook没有使用标准的文本框表单控件。相反,对于文本消息中的每一行,它似乎都在使用使用Chrome扩展在Facebook等网站中插入字符,facebook,google-chrome,google-chrome-extension,Facebook,Google Chrome,Google Chrome Extension,我创建了一个chrome扩展,允许用户在文本框中右键单击,并插入特殊字符。这在StackOverflow等许多网站上都有效,但在Facebook等网站上不起作用。这是因为Facebook没有使用标准的文本框表单控件。相反,对于文本消息中的每一行,它似乎都在使用div>div>span>span构造。有没有办法创建一个Chrome扩展到像这样的目标页面组件 我的Chrome扩展代码的一部分如下所示: main.js: chrome.contextMenus.create({ title: "\
div>div>span>span
构造。有没有办法创建一个Chrome扩展到像这样的目标页面组件
我的Chrome扩展代码的一部分如下所示:
main.js:
chrome.contextMenus.create({
title: "\u038F",
contexts:["editable"],
onclick: function(info, tab){
chrome.tabs.sendMessage(tab.id, {action: "insertCharacter", character: '\u038F'});
}
});
content.js
chrome.extension.onMessage.addListener(function(request, sender, sendResponse){
var objField = document.activeElement;
if (request.action == "insertCharacter"){
insertAtCursor(objField, request.character);
}
});
function insertAtCursor(sField, sValue){
if (sField.selectionStart || sField.selectionStart == '0'){
var nStart = sField.selectionStart;
var nEnd = sField.selectionEnd;
sField.value = sField.value.substring(0, nStart) + sValue + sField.value.substring(nEnd, sField.value.length);
sField.selectionStart = nStart + sValue.length;
sField.selectionEnd = nStart + sValue.length;
}
else {
sField.value += sValue;
}
}
是否有一种更通用的方法来处理不同站点上的各种情况?如果没有,是否有一种方法专门针对Facebook,因为我自己(可能还有其他人)大部分时间都会在Facebook上使用我的扩展。(当然,让它在GMail等电子邮件网站上运行也会有好处)。如果它对其他人有帮助,我根据wOxxOm的建议修改了我的代码:
chrome.extension.onMessage.addListener(function(request, sender, sendResponse){
if (request.action == "insertCharacter"){
insertAtCursor(request.character);
}
});
function insertAtCursor(sValue){
document.execCommand("insertText", false, sValue);
}
它比我原来的方法要简洁得多,
insertText
自动处理选择方面。如果它对其他人有帮助,这就是我根据wOxxOm的建议修改代码的地方:
chrome.extension.onMessage.addListener(function(request, sender, sendResponse){
if (request.action == "insertCharacter"){
insertAtCursor(request.character);
}
});
function insertAtCursor(sValue){
document.execCommand("insertText", false, sValue);
}
它比我原来的方法要紧凑得多,
insertText
自动处理选择方面。我认为唯一可靠的方法是使用insertText
参数的document.execCommand。元素应该是集中的。谢谢你,这就成功了!我认为唯一可靠的方法是document.execCommand和insertText
参数。元素应该是集中的。谢谢你,这就成功了!