Я написал очень простое расширение 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
не выполняется (т. Е. Ничего не отправляется в скрипт содержимого), поскольку интересующий текст не прокручивается в просмотреть .....
В целом, я хочу иметь возможность выделить предложение на странице, сохранить предложение, затем закрыть веб-страницу и дать ссылку на / снова открыть эту страницу и прокрутить предложение в представлении (и возможно выделите предложение). Кто-нибудь знает способ сделать это?