Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Chrome扩展在Facebook等网站中插入字符_Facebook_Google Chrome_Google Chrome Extension - Fatal编程技术网

使用Chrome扩展在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: "\

我创建了一个chrome扩展,允许用户在文本框中右键单击,并插入特殊字符。这在StackOverflow等许多网站上都有效,但在Facebook等网站上不起作用。这是因为Facebook没有使用标准的文本框表单控件。相反,对于文本消息中的每一行,它似乎都在使用
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
参数。元素应该是集中的。谢谢你,这就成功了!