Ответ 1
UPDATE
Я просто посмотрел на docs, и все это можно сделать гораздо проще без каких-либо скриптов и обратных вызовов:
chrome.contextMenus.create({
title: "Test %s menu item",
contexts:["selection"],
onclick: function(info, tab) {
sendSearch(info.selectionText);
}
});
Это все, что вам нужно, потому что вы можете использовать %s
в заголовке меню, чтобы получить выделенный текст.
(все ниже не требуется больше)
Ваш метод getSelection()
не возвращает выделенный текст, он просто вводит содержимое script на страницу. Выбранный текст будет получен позже в 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);
}