Ошибка надстройки Firefox tabs.executeScript на определенных страницах Нет окна, соответствующего {matchesHost: [‹all_urls›]}

У меня есть веб-расширение Firefox, портированное из расширения Chrome. Вызов executeScript завершается ошибкой на этом сайте.

https://addons.mozilla.org/en-US/firefox/

Я тестировал несколько страниц на этом сайте, и все они дают одну и ту же ошибку.

Минимальный код для воспроизведения этого

popup.js

document.addEventListener("DOMContentLoaded", function () {
    chrome.tabs.query({"active": true}, function(tabs) {        
        chrome.tabs.executeScript(tabs[0].id, {"code": "console.log('Script executed in ' + document.location.href);"}, function(r) {
            if(chrome.runtime.lastError) {
                console.log(chrome.runtime.lastError);
                document.body.innerHTML = 'Execute script Fail. check console';         
            } else {
                document.body.innerHTML = 'Execute script Success';         
            }
        });
    });
});

manifest.json

{
    "manifest_version": 2,
    "name": "execscript_test",
    "short_name": "execscript_test",
    "version": "0.0.1",

    "description": "desc",
    "icons": {
        "19": "images/icon19.png",
        "38": "images/icon38.png",
        "128": "images/icon.png"
    },

    "applications": {
        "gecko": {
            "id": "[email protected]",
            "strict_min_version": "48.0"
        }
    },

    "background": {
        "scripts": ["background.js"]
    },

    "permissions": [
        "tabs",
        "<all_urls>"
    ],
    "browser_action": {
        "browser_style": false,
        "default_icon": "images/icon.png",
        "default_title": "execscript_test",
        "default_popup": "popup.html"
    }    
}

background.js — файл присутствует, но он пуст

всплывающее окно.html

<!doctype html>
<html>
    <head>
        <meta charset="utf-8" />
        <script src="popup.js"></script>
    </head>
    <body>

    </body>
</html>

На https://addons.mozilla.org/en-US/firefox/addon/engrip-tracker/?src=search странице я нажал кнопку браузера и получил эту ошибку в консоли браузера

Error: No window matching {"matchesHost":["<all_urls>"]}
Stack trace:
Async*@moz-extension://062a83b0-81f1-42f0-84a8-89ecdc2c08e0/popup.js:8:4
Async*@moz-extension://062a83b0-81f1-42f0-84a8-89ecdc2c08e0/popup.js:2:2
EventListener.handleEvent*@moz-extension://062a83b0-81f1-42f0-84a8-89ecdc2c08e0/popup.js:1:1

Я думал, что это может быть какая-то проблема со схемой URL, но это происходит даже на https://addons.mozilla.org/en-US/firefox/ Тот же код работает без ошибок на chrome.

У меня ФФ v50. Я также тестировал это на FF каждую ночь (v53.0a1), и ошибка сохраняется.

Это что-то конкретное для этого сайта? Или я что-то здесь упускаю?


person smk    schedule 25.11.2016    source источник
comment
Я попробовал ваш код и также столкнулся с проблемой на FF52.0a2 (версия для разработчиков). Я также пробовал это как просто actionButton без использования всплывающего окна. В этом случае проблема все еще существует (т. Е. Это не проблема, связанная с тем, что это делается во всплывающем окне.)   -  person Makyen♦    schedule 25.11.2016
comment
Кстати: вашему chrome.tabs.query потребуется как минимум одно дополнительное свойство queryInfo. Если что-то не ограничивает это одним окном, вы получите несколько записей в массиве tabs, если у вас открыто более одного окна. Обычно это будет currentWindow: true, но может быть и другим или более сложным, в зависимости от того, что вы хотите. Так или иначе, вы предполагаете, что нужная вам вкладка является первой в массиве результатов. В настоящее время это не гарантируется на основе предоставленных вами параметров.   -  person Makyen♦    schedule 25.11.2016
comment
Хотя я еще не отследил это в исходном коде, тот факт, что это сделано, будет напрямую сопоставим с тем, что Google не разрешает внедрять скрипты в Интернет-магазин Chrome. Chrome отвечает: Галерея расширений не может быть написана по сценарию. когда этот код используется в Chrome на https://chrome.google.com/webstore.   -  person Makyen♦    schedule 25.11.2016
comment
@Makyen - о!, хорошо. поставщики браузеров, блокирующие внедрение скриптов на своих страницах распространения расширений, кажутся разумными Надеюсь, что эта технология блокировки доступна только для браузеров, а не для веб-сайтов, иначе скрипты контента скоро станут бесполезными.   -  person smk    schedule 27.11.2016


Ответы (1)


Это преднамеренно, это описано, например. https://bugzilla.mozilla.org/show_bug.cgi?id=1310082

person Andrew Swan    schedule 26.11.2016
comment
Похоже на время и вкус. Если это просто сайты дополнений, я могу двигаться дальше с исключениями. - person smk; 27.11.2016