2010-10-21 200 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