chrome расширение для сохранения ссылки на страницу с выделенным текстом - PullRequest
2 голосов
/ 31 января 2020

Я написал очень простое расширение c chrome, которое отслеживает предложения, которые я выделил. Я хочу иметь возможность вернуться к предложению, когда я закрыл веб-страницу, где я его выделил. т.е. я хочу иметь возможность выделить предложение на странице, сохранить предложение, затем закрыть веб-страницу и сделать ссылку на / открыть эту страницу, а затем прокрутить предложение в поле зрения (и, возможно, выделить предложение).

Рабочий процесс выглядит следующим образом: у меня есть фоновый скрипт, всплывающее окно и скрипт контента.

1) Я выделяю интересующий текст на странице.

2) Я нажимаю save_sentence кнопка, которую я положил во всплывающем окне. Сообщение отправляется из фона в скрипт содержимого, и выделенный текст записывается с помощью window.getSelection().toString().

3) Выделенное предложение отправляется обратно в фоновый скрипт. URL-адрес страницы также отправляется обратно, а также другая дополнительная информация, такая как div, в котором было предложение.

chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
....
        var sentence = window.getSelection().toString();
        var linker = window.location.href
        .....
        sendResponse({
            response: sentence,
            linker:linker,
            linkback:elem,
            cat:cat,
            number:number
        })
....
})

4) Сообщение из контента принимается в фоновом режиме. js и необходимая информация сохраняется с помощью localStorage.setItem(...).

5) Затем я закрываю страницу, с которой я взял текст, и теперь, если я хочу открыть эту страницу, я нажимаю кнопку return.

Я хотел бы, чтобы необходимая информация, сохраненная в localStorage, использовалась для повторного открытия страницы-источника новой вкладки, а сохраненный текст был прокручен для просмотра. Информация, которая была сохранена в localStorage, выглядит следующим образом: sentence - выделенный текст, linker - URL-адрес страницы, с которой был взят текст, linkback - идентификатор / класс элемента, где cat означает, является ли идентификатор элемента id или class (чтобы узнать, использовать ли getElementById или getElementsByClassName), number - номер элемента (если существует более одного элемента с этим классом / идентификатором)

background

$('#return').click(function() {
  var linkback=localStorage.getItem('linkback');
  var linker=localStorage.getItem('linker');
  var sentence=localStorage.getItem('sentence');
  var number=localStorage.getItem('number');
  var cat=localStorage.getItem('cat')
  chrome.tabs.create({ url: linker, active: true}); #open new tab
    var msg={
      action:'scrollto',
      linker:linker,
      linkback:linkback,
      number:number,
      cat:cat
    }
  chrome.tabs.query({currentWindow: true, active: true}, function (tabs) {
    chrome.tabs.sendMessage(tabs[0].id, msg); #send relevant info to content.js
    });
  });

content

 chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
 if(message.action==='scrollto'){
    console.log('not ready')
    chrome.tabs.update()
        console.log('ready')
        var win=message.linker
        var elem=message.elem
        var cat= message.cat
        var number=message.number
        console.log('win');
        var cat = message.cat
        if(cat === 'class'){
            destination=document.getElementsByClassName(elem)[number]
        }else{
            destination=document.getElementById(elem)[number]
        }
        var destination=$.parseHTML(message.linkback)
        console.log(destination)
        destination.scrollIntoView()
        window.scrollBy(0, -50)
}

Проблема

Когда я нажимаю * Кнопка 1042 * в popup, открывается новая вкладка, автоматически закрывается всплывающее окно, и команда sendMessage не выполняется (т. Е. Ничего не отправляется в скрипт содержимого), поскольку интересующий текст не прокручивается в просмотреть .....

В целом, я хочу иметь возможность выделить предложение на странице, сохранить предложение, затем закрыть веб-страницу и дать ссылку на / снова открыть эту страницу и прокрутить предложение в представлении (и возможно выделите предложение). Кто-нибудь знает способ сделать это?

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