ОБНОВЛЕНИЕ
Я только что посмотрел на документы , и все это можно сделать намного проще без каких-либо сценариев контента и обратных вызовов:
chrome.contextMenus.create({
title: "Test %s menu item",
contexts:["selection"],
onclick: function(info, tab) {
sendSearch(info.selectionText);
}
});
Это все, что вам нужно, потому что вы можете использовать %s
в заголовке меню, чтобы получить выделенный текст.
(все, что ниже, больше не нужно)
Ваш getSelection()
метод не возвращает выделенный текст, он просто внедряет скрипт содержимого на страницу.Выбранный текст будет получен через некоторое время в onRequest
, а затем передан функции обратного вызова из вашего массива обратных вызовов в качестве параметра.
Итак, эту часть:
var tx = getSelection();
var title = "Test '" + tx + "' menu item";
var id = chrome.contextMenus.create({"title": title, "contexts":[selection],
"onclick": sendSearch(tx)});
console.log("selection item:" + id);
необходимо изменить на что-товот так:
getSelection(function(tx) {
var title = "Test '" + tx + "' menu item";
var id = chrome.contextMenus.create({"title": title, "contexts":["selection"],
"onclick": sendSearch(tx)});
console.log("selection item:" + id);
})
Но я бы вообще избавился от этого массива selection_callbacks
, так как считаю, что он не нужен:
chrome.extension.onRequest.addListener(function (request) {
var tx = request;
var title = "Test '" + tx + "' menu item";
var id = chrome.contextMenus.create({"title": title, "contexts":["selection"],
"onclick": sendSearch(tx)});
console.log("selection item:" + id);
});
Также обратите внимание, что "contexts":[selection]
необходимо"contexts":["selection"]
, а "onclick": sendSearch(tx)
должно быть примерно таким:
"onclick": function(info, tab) {
sendSearch(info.selectionText);
}