Доступ к другим страницам внутри расширения из скрипта контента или фоновой страницы - PullRequest
0 голосов
/ 10 марта 2011

все.Кто-нибудь может сказать мне, как я могу получить доступ к DOM других страниц в моем расширении из скрипта контента или фоновой страницы?Я пытался установить соединение из скрипта контента с popup.html.Но это не работает.Но тот же код работает с background.html ... Вот код, который я помещаю в myscript.js:

function sendLast(){
  var result = document.getElementById('last_3212164');  //document.evaluate("//*[@id='last_3212164']", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
  alert(result.textContent);
  chrome.extension.sendRequest({greeting: "hello"}, function(response) {
    console.log(response.farewell);
  });
}

var t=setTimeout("sendLast()", 3000);

Вот код из popup.html:

<html>
  <head>
        <script>
chrome.extension.onRequest.addListener(
  function(request, sender, sendResponse) {
    alert("Got it!");
    if (request.greeting == "hello")
      sendResponse({farewell: "goodbye"});
    else
      sendResponse({}); // snub them.
  }
);

    </script>
  </head>
<body>
Here will be the values
</body>
</html>

Этот коддолжен давать предупреждение "Понял" каждые 3 секунды.Но ничего не происходит, молчание ... Я открываю Popup.html через 1 секунду после загрузки главной страницы.

1 Ответ

1 голос
/ 10 марта 2011

Если всплывающее окно открыто в данный момент, вы можете получить доступ к его DOM с фоновой страницы.Если вам это нужно в скрипте контента, вам сначала нужно отправить запрос на фоновую страницу.

Допустим, вы хотите прочитать значение поля ввода test из всплывающего окна внутри скрипта контента:

content_script.js:

chrome.extension.sendRequest({cmd: "findElementInPopup"}, function(response){
    console.log("value:", response);
});

background.html:

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    if(request.cmd == "findElementInPopup") {
        var winArray = chrome.extension.getViews({type:"popup"});

        //if popup is opened
        if(winArray.length > 0) {
            sendResponse(winArray[0].document.getElementById("test").value);
        }
    }
});

Вам нужно будет сделать всеманипуляции с DOM на фоновой странице, когда попытка отправить целое window через ответ обратно на скрипт содержимого может привести к ошибке (структура объекта слишком сложна для сериализации json).

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