Перейдите к нескольким URL-адресам из сценария расширения и передачи сообщений в сценарий содержимого для каждого URL-адреса. - PullRequest
0 голосов
/ 15 января 2019

Итак, вот моя проблема: я (пытаюсь) разработать веб-расширение, которое:

  • открывает панель с кнопкой
  • после нажатия кнопки в браузере открывается новая вкладка
  • на этой новой вкладке, из скрипта расширения я перебираю массив urls и обновляю новую вкладку браузера. На каждом URL я передаю сообщение в скрипт контента, чтобы удалить заголовок под элементом «a» на странице. После очистки скрипт содержимого отправляет текстовое название в скрипт расширения.

Вот мои сценарии:

Фоновый скрипт background.js:

    chrome.browserAction.onClicked.addListener(function (tab) {
        var tabUrl = tab.url;
        originalWindowId = tab.windowId;
        var popupURL = chrome.runtime.getURL("extension/main_panel.html");
        chrome.windows.create({
            url: popupURL,
            type: 'panel',
            width: 600,
            height: 520
        }, function (window) {
            extensionWindowId = window.id;
        });
    });

Основная панель main_panel.html:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <script src="../background/jquery.js"></script>
</head>
<body>
    <div class="title" id="main_title">
        <p>EXTRACTIFY</p>
    </div>
    <button type="button" id="scrap_button">SCRAP</button>    
    <script src="functions/scrap.js"></script>
    <script src="functions/main_panel.js"></script>
</body>
</html>

Скрипт главной панели (который получает кнопку из main_panel.html) main_panel.js:

var urls = ["https://forum.openstreetmap.fr/viewtopic.php?f=3&t=6811&start=0", "https://forum.openstreetmap.fr/viewtopic.php?f=3&t=6811&start=25"];
var scrapButton = document.getElementById("scrap_button");
scrapButton.addEventListener("click", function (event) {
    chrome.tabs.create({
        url: "about:newtab"
    }, function (newTab) {
        var newTabId = newTab.id;
        console.log("created newTab : " + newTabId);
        for (var i = 0; i < urls.length; i++) {
            chrome.tabs.update(newTabId, {
                url: urls[i]
            });
            chrome.tabs.onUpdated.addListener(function (newTabId , info) {
              if (info.status === 'complete') {
                var port = chrome.tabs.connect(newTabId, {
                    name: "scrap"
                });
                port.postMessage({
                    type: "title"
                });
                port.onMessage.addListener(function (msg) {
                    console.log("recieved message : " + msg.title);
                });
              }
            });
        }
    });
});

Сценарий содержимого scrapContent.js:

chrome.runtime.onConnect.addListener(function (port) {
    console.assert(port.name == "scrap");
    port.onMessage.addListener(function (msg) {
        console.log("recieved message : " + msg.type); 
        if (msg.type == "title") {
            var title = $("h3.first a").text();
            port.postMessage({
                title: title
            });
        }
    });
});

Что на самом деле делает скрипт: он удаляет второй URL и передает информацию, которую я хочу, в скрипт расширения. Но он попадает в лом первой страницы. Поэтому я подозреваю, что проблема (-a) синхронизации.

Большое спасибо за вашу помощь!

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