Функция доступа с фоновой страницы в расширении Chrome - PullRequest
0 голосов
/ 21 октября 2010

На моей странице background (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>

Однако «view.setImageUrl (screenshotUrl)» в background.html завершается ошибкой, поскольку говорит, что представление не имеет такой функции. Просто чтобы прояснить, я пытаюсь получить доступ к функции в history.html И передать ей параметр (screenshotUrl). РЕДАКТИРОВАТЬ: re предложение Серга Я заменил функцию var addImage в фоновом режиме следующим:

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

Потом добавил слушателя на страницу истории ... сработало!

1 Ответ

1 голос
/ 21 октября 2010

Раньше я не использовал getViews(), поэтому я не могу это прокомментировать (что консоль скажет, когда вы добавите в нее chrome.extension.getViews()?), Но вот несколько способов:

  • Передайте ваш URL как параметр get при создании вкладки (history.html?url=<urlencoded_url>)
  • Использование запросов. chrome.extension.sendRequest({url:url}); на странице bkgd и chrome.extension.onRequest.addListener() в history.html
  • Используйте «тянуть» вместо «толкать». В history.html вы можете использовать chrome.extension.getBackgroundPage().getMyUrl()

Я бы использовал первое решение, так как оно самое простое и быстрое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...