2010-10-21 202 views
0

在我的背景(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

我没有用之前getViews(),所以我无法在(当你倾倒chrome.extension.getViews()到它是什么控制台说什么?)评论,但这里有几个解决:

  • 通过你的网址为GET (history.html?url=<urlencoded_url>
  • 使用请求。 chrome.extension.sendRequest({url:url}); in bkgd page and chrome.extension.onRequest.addListener() in history.html
  • 使用“pull”而不是“push”。在history.html中,您可以使用chrome.extension.getBackgroundPage().getMyUrl()

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

+0

第一个解决方案对于1个url /图像来说确实很快且容易,但是它能用于60个urls吗? – LDK 2010-10-21 17:02:00

+1

@LDK我认为它仍然会,但如果你需要传递如此多的数据,那么其他解决方案可能会更好。如果您传递大量数据,则使用长期连接会更有效:http://code.google.com/chrome/extensions/dev/messaging.html#connect – serg 2010-10-21 17:11:59