Сбой WebExtension молча в Firefox, но не в Chrome - PullRequest
0 голосов
/ 24 сентября 2018

Я делаю WebExtension для Chrome и Firefox, который добавляет больше информации в GitHub.Предполагается, что он работает быстрее, чем существующие расширения.

У меня настроен манифест, как рекомендует документация Mozilla.

{
    "manifest_version": 2,
    "name": "GitHub Extended",
    "version": "0.0.1",
    "description": "Adds information to GitHub normally accessible only by the API.",
    "permissions": [
        "https://github.com/*"
    ],
    "content_scripts": [
        {
            "all_frames": true,
            "run_at": "document_start",
            "matches": [
                "https://github.com/*"
            ],
            "js": [
                "source/github.js",
                "source/repository.js"
            ]
        }
    ]
}

Когда страница загружена, сценарии содержимого внедряются.Файл github.js представляет собой легкую оболочку вокруг API GitHub, а repository.js - это код для модификации DOM корневой страницы основного репозитория.

Самый важный код там - это preloader, который делаетзапрос API во время загрузки страницы и ожидает завершения обоих событий перед добавлением в DOM.

Хотя этот текущий код отлично работает в Chrome, в Firefox он просто ничего не делает.Я попытался проверить это, поместив console.log("I'm loaded!"); в repository.js.Ничего не напечатано.Почему этот код не работает в Firefox?

function beginPreload() {
    console.log("Test from preload scope!");

    let urlMatch = window.location.pathname.match(/\/([\w-]+)\/([\w-]+)/);
    console.log(urlMatch);

    Promise.all([
        getSortedReleases(urlMatch[1], urlMatch[2]),
        documentReady()
    ]).then((values) => {
        let releaseJson = values[0];

        let actionsEl = document.getElementsByClassName("pagehead-actions")[0];
        let dlCount = 0;

        for (release of releaseJson)
            for (asset of release.assets)
                dlCount += asset.download_count;

        let buttonEl = createDownloadButton(
            releaseJson[0].html_url,
            window.location.pathname + "/releases",
            formatNum(dlCount)
        );

        actionsEl.appendChild(buttonEl);
    });
}

beginPreload();
console.log("Test from global scope!");

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Это было решение.

"permissions": [
    "https://api.github.com/*"
]

Все, что нужно было сделать, это добавить разрешение для расширения на использование API GitHub.AFAIK, это требуется только для скриптов содержимого, использующих XHR.

0 голосов
/ 25 сентября 2018

Вам нужно идти шаг за шагом и сначала спросить себя, действительно ли скрипт вставлен на страницу github FF: удалите все из вашего contentScript, перезагрузите расширение и проверьте свою консоль FF.Если вы видите журнал, начните постепенно добавлять код до тех пор, пока он не сломается, если нет, то у вас возникнут проблемы с содержимым сборки.

...