Javascript 从Chrome扩展中的后台页面访问功能

Javascript 从Chrome扩展中的后台页面访问功能,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,在我的背景(background.html)页面中,我有以下js: function capturePage(){ chrome.tabs.captureVisibleTab(null, function(img){ var screenshotUrl = img; chrome.tabs.create({"url":"history.html"}, function(tab){ var t = tab; var addImage = function

在我的背景(background.html)页面中,我有以下js:

function capturePage(){
  chrome.tabs.captureVisibleTab(null, function(img){
    var screenshotUrl = img;
    chrome.tabs.create({"url":"history.html"}, function(tab){
      var t = tab;
      var addImage = function(){
        var view = chrome.extension.getViews()[0];
        view.setImageUrl(screenshotUrl);
      }
      chrome.tabs.onUpdated.addListener(addImage);
    });
  });
 }

 chrome.browserAction.onClicked.addListener(capturePage);
在history.html中,我有:

<html>
<head>
  <title></title>
  <script>
    function setImageUrl(url){
      document.getElementById("target").src = url;
    }
  </script>
</head>
<body>
  <img id="target" src="" >
</body>
</html>

然后在历史页面上添加了一个侦听器。。。成功了

我以前没有使用过
getViews()
,所以我不能对此发表评论(当您将
chrome.extension.getViews()
转储到控制台中时,控制台会说什么?),但这里有两个解决方法:

  • 在创建选项卡时将url作为get参数传递(
    history.html?url=
  • 使用请求
    chrome.extension.sendRequest({url:url})和history.html中的
    chrome.extension.onRequest.addListener()
  • 使用“拉”而不是“推”。在history.html中,您可以使用
    chrome.extension.getBackgroundPage().getMyUrl()

我会使用第一个解决方案,因为它是最简单、最快的。

第一个解决方案对于1个url/图像来说确实是快速、简单的,但它对60个url有效吗?@LDK我认为仍然有效,但如果您需要传递这么多数据,那么其他解决方案可能会更好。如果要传递大量数据,则使用长寿命连接会更有效:
var port = chrome.tabs.connect(tab.id,{name: "history_connect"});
port.postMessage({mType:"url",url:screenshotUrl});