(扩展)更新选项卡时保存更改的值

(extension)Saving the changed values when i updating the tab

所以,我在 popup.html 中有一个输入。如果您输入数据,popup.js 会将数据发送到 content.js 并且它已经更改了选项卡上的某些内容。但是更新选项卡后选项卡上的更改消失了。您如何才能做到只有在 input?

中输入新数据时它们才会保留并更改

popup.html и popup.js

var input = document.querySelector('#inp');
var text = document.querySelector("#text");
var button = document.querySelector("#btn");

btn.addEventListener('click', function() {
  var inp = input.value;

  chrome.tabs.query({active: true, currentWindow: true}, function(foundTabs) {

 const activeTab = foundTabs[0];

 chrome.tabs.sendMessage(activeTab.id, {text: inp});//sending value of input
    })
});
<input type="text" id="inp">
<button id="btn">Send</button>

content.js:

chrome.runtime.onMessage.addListener(function(request) {
     const txt  = request.text; //get input value
     chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
          //insert in html
     });
});

要永久保存更改,您需要将状态保存在某处。

为此,我建议查看 the Chrome developer background page

您可以从后台页面向您的content script发送消息,即content.js

为了保留所做的更改,我会使用 localStorage(永久)或 sessionStorage(持续时间与 window 一样长)。这样,您就可以跟踪所做的更改,并在网页更新时重新进行更改。

例如:

content.js

//whenever the page is loaded/updated, check if there was a saved value
var my_text = sessionStorage.getItem("my_text");
if (my_text) {  // if there was, update the page accordingly.
  document.querySelector("input").value = my_text;
}

chrome.runtime.onMessage.addListener(function(message){  //when a message is received...
  my_text = message.text;
  document.querySelector("input").value = my_text;  //...update the webpage ...
  sessionStorage.setItem("my_text", my_text);  // ... and save the value
});

这样您的更改将在页面重新加载时持续存在,直到 window 关闭。要使它们在 window 关闭时仍然存在,请将 sessionStorage 替换为 localStorage