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

时间:2010-10-21 14:54:03

标签: 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(){
        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>

然而,background.html中的“view.setImageUrl(screenshotUrl)”失败了,因为它说视图没有这样的功能。为了清楚起见,我正在尝试访问history.html中的函数并将参数传递给它(screenshotUrl)。 编辑:重新Serg的建议我在后台用以下内容替换了var addImage函数:

var port = chrome.tabs.connect(tab.id,{name: "history_connect"});
port.postMessage({mType:"url",url:screenshotUrl});

然后在历史页面上添加了一个监听器......工作!

1 个答案:

答案 0 :(得分:1)

之前我没有使用getViews()因此我无法对此发表评论(当您将chrome.extension.getViews()转储到其中时,控制台会说些什么?),但这里有几个解决方法:

  • 在标签创建期间(history.html?url=<urlencoded_url>
  • 将您的网址作为get参数传递
  • 使用请求。 bkgd页面中为chrome.extension.sendRequest({url:url});,history.html中为chrome.extension.onRequest.addListener()
  • 使用“pull”而不是“push”。在history.html中,您可以使用chrome.extension.getBackgroundPage().getMyUrl()

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