Google Chrome ведет себя иначе, когда проверяется всплывающее окно - PullRequest
0 голосов
/ 20 августа 2011

В моих попытках научиться писать расширения Google Chrome я решил написать такое, где при нажатии кнопки во всплывающем окне расширение открывает новое окно и открывает новую вкладку для каждого изображения на странице.URL каждой вкладки является источником для каждого изображения.(Я не думаю, что это особенно полезно, я делаю это просто как упражнение).

Странная вещь в том, что это работает именно так, как я ожидал, когда щелкнул правой кнопкой мыши на значке расширенияи нажал «проверить всплывающее окно».Это не работает должным образом, когда я просто использую его как обычно.При обычном использовании он открывает только 3 или 4 изображения (еще более странно то, что каждый раз ему удается открывать разное количество изображений).

Вот мой код

popup.html

<script type="text/javascript">

function getImages() {
    chrome.tabs.getSelected(null, function(tab){
        chrome.tabs.sendRequest(tab.id, {code: "getImages"}, function(images) {
            console.log(images);
            openImages(images);
        });
    });
}

function openImages(images) {
    chrome.windows.create({url: images[0]}, function(window) {
        for(var i=1; i<images.length; i++) {
            chrome.tabs.create({windowId: window.id, url: images[i]});
        }
    });
}

</script>

<button onclick="getImages();">Open images</button>

contentscript.js

chrome.extension.onRequest.addListener(
    function(request, sender, response) {
        if(request.code == 'getImages') {
            console.log("We're in!");
            var urls = [];
            var images = document.getElementsByTagName("img");

            for(var i=0; i<images.length; i++) {
                urls.push(images[i].src);
            }
            console.log(urls);
            response(urls);
        }
    }
);

У кого-нибудь есть идеи, почему это может быть?

1 Ответ

1 голос
/ 20 августа 2011

Когда вы открываете новое окно, оно получает фокус, поэтому всплывающее окно теряет фокус. Обычно Chrome закрывает всплывающее окно расширения, когда оно теряет фокус, но сохраняет его открытым, когда вы проверяете его с помощью WebInspector. Похоже, что на всплывающей странице ваша images переменная списка уничтожается.

3 идеи из множества других, чтобы исправить это:

  • Вместо одного URL-адреса укажите массив URL-адресов для функции windows.create(). (лучшее решение)
  • Создайте окно, не выделяя его (добавьте "focused ": false к объекту, данному для функции создания) и выделите его только при создании последней закладки.
  • Открытие вкладок из скрипта содержимого или фоновой страницы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...