Chrome Расширение: можно ли показать текст ссылки в пункте контекстного меню? - PullRequest
0 голосов
/ 08 февраля 2020

Я начал создавать простое расширение для Google Chrome, которое добавит новый элемент контекстного меню, если щелкнуть правой кнопкой мыши ссылку или щелкнуть правой кнопкой мыши, когда выделен какой-либо текст. Этот пункт меню должен содержать текст в виде

Search for "{link/select text}" on XYZ

Если бы меня просто заинтересовал выделенный текст, я мог бы отформатировать заголовок так:

Search for "%s" on XYZ

Когда откроется контекстное меню,% s превратится в выделенный текст. Персиковый. Однако получить такое же поведение при наведении курсора на ссылку не так просто. Эта строка превращается в Search for "" on XYZ, что, конечно, недопустимо. Мне нужно одинаковое поведение в обоих случаях.

Я создал аналогичное расширение для Firefox, где у вас есть событие onShown, которое срабатывает при открытии контекстного меню и дает вам объект с обоими linkText и selectionText свойства. Я использую прослушиватель этого события, чтобы сохранить текст, который я хочу найти, в глобальной переменной и вызываю метод update моего пункта контекстного меню.

К сожалению, я не смог найти пути к этому с помощью Chrome API для контекстных меню. Существует метод обновления, поэтому я мог изменить заголовок, но мне не удалось найти событие, подобное onShown, где я мог бы получить два значения и вызвать этот метод обновления.

Пока это мой код:

var url = "https://www.some-website.com/search?q=";
var searchterm = "";
var contexts = ["selection","link"];
var title = `Search "%s" on XYZ`;
var id = "contextSearch";

// Install our extension when chrome.runtime.onInstalled is called
chrome.runtime.onInstalled.addListener(function() {

  // Create the context menu item
  chrome.contextMenus.create(
    {
      "id": id,
      "title": title, 
      "contexts": contexts,
      "onclick": contextMenuAction
    }, 
    // Show successful creation in log
    function() {
      console.log("successfully created");
  });

});

function contextMenuAction(info, tab) {
  console.log(info);    
  console.log(tab);

  // Save the searchterm and open a new tab to execute the search
  searchterm = info.selectionText;
  chrome.tabs.create({url: url+searchterm});
}

Объекты info и tab не содержат никакой информации о тексте ссылки, и даже если бы они это сделали, это было бы слишком поздно, потому что мне нужно получить этот текст, когда открывается контекстное меню. Ты знаешь какой-нибудь способ добиться того, что я пытаюсь сделать? Было бы грустно, если бы у моего Chrome расширения было меньше функциональности, чем у Firefox one ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...