屏幕取词,专治各种收费应用

document.addEventListener("mousemove", update_mouse_pos, true);
document.addEventListener("mouseup", on_mouse_up, true);
document.addEventListener("mousedown", on_mouse_down, true);
document.addEventListener("dblclick", on_mouse_dbclick, true);

var clientX, clientY;
// 鼠标按下的位置,用于判断鼠标是不是有很大的位移
var mouse_down_x, mouse_down_y;

function onText(resonse) {
}

/* 接受到取词通知时候的回调函数 */
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) 
{
    if(request.action == "onmsg") 
    {
        var word = get_word_by_mouse();
        if (word.text && word.text.length > 0)
         {
            if (word.text.length > 300) 
            {
                if (word.pos == -1) 
                {
                    word.text = word.text.substring(0, 300);
                } 
                else {
                    var start = Math.max(0, word.pos - 150);
                    var end = Math.min(word.text.length, word.pos + 150);
                    if (start == 0) 
                    {
                        end = start + 300;
                    } 
                    else if (end == word.text.length)
                    {
                        start = end - 300;
                    }
                    word.pos = word.pos - start;
                    word.text = word.text.substring(start, end);
                }
            }
            chrome.extension.sendRequest({action:"word", msg: word.text, offset: word.pos}, onText)  //返回后台,发送词语
        }
   }
});
function update_mouse_pos(event) {
  clientX = event.clientX, clientY = event.clientY;
}

/* 得到鼠标位置所指的词语 */
function get_word_by_mouse() {
    var ret = { text: "", pos: -1};
    if (clientY  == 0 || clientY == 0) {
        return ret;
    }
    var r = document.caretRangeFromPoint(clientX, clientY);
    if (!r) {
        return ret;
    }
    if (r.startContainer.data) {
        var rcText = null;
        if (r.startContainer.getBoundingClientRect) {
            rcText = r.startContainer.getBoundingClientRect();
        } else if (r.startContainer.parentElement && r.startContainer.parentElement.getBoundingClientRect) {
            rcText = r.startContainer.parentElement.getBoundingClientRect();
        }
        if (rcText == null || (rcText && rcText.left < clientX && clientX < rcText.right && rcText.top < clientY && clientY < rcText.bottom)) {
            ret.text = r.startContainer.data;
            ret.pos = r.startOffset;
            return ret;
        }
    }
    return ret;
}
;

function on_mouse_down(event) {
    mouse_down_x = event.clientX;
    mouse_down_y = event.clientY;
}


function on_mouse_up(event) {
    if ( Math.abs(event.clientX - mouse_down_x) > 2 || Math.abs(event.clientY - mouse_down_y) > 2)
    {
        var sText = document.selection == undefined ? document.getSelection().toString():document.selection.createRange().text;
        if (sText != "")
        {
            // todo: 字符串过长的问题.
            if (sText.length >2000)
                sText = sText.substr(0, 2000);
            chrome.extension.sendRequest({action:"stroke", msg:sText}, onText);
            console.log(sText);
        }
    }
}

function on_mouse_dbclick(event) {
    var sText = document.selection == undefined ? document.getSelection().toString():document.selection.createRange().text;
    if (sText != "")
    {
        // todo: 字符串过长的问题.
        if (sText.length > 2000)
            sText = sText.substr(0, 2000);
        chrome.extension.sendRequest({action:"stroke", msg:sText}, onText);
        console.log(sText);
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容