Подтвердить что ты не робот

Отладка сценариев контента для расширения Chrome

Общие вопросы

Здравствуйте! Я вникаю в мир Chrome Extensions, и у меня возникают проблемы с сокращением общего рабочего процесса. Похоже, что Google недавно переключился на серьезную защиту страниц событий, вместо того чтобы хранить все в background.js и background.html. Я принимаю участие в этом, чтобы означать, что мы должны передать большую часть вашей логики расширения содержимому script.

В праймер страницы Google, они содержат контент script, указанный в файле manifest.json. Но в своем расширении примера страницы события он вводится через этот кодовый блок в background.js: chrome.tabs.executeScript(tab.id, {file: "content.js"}, function() { });

Каковы преимущества этого в том или ином направлении?

Мой код

Я продвигаю программный способ ввода содержимого script, например, в Google.

manifest.json

{
    "manifest_version": 2,
    "name": "Test",
    "description": "Let get this sucker working",
    "version": "0.0.0.1",
    "permissions": [
        "tabs",
        "*://*/*"
    ],
    "background": {
        "scripts": ["background.js"],
        "persistent": false
    },
    "browser_action": {
        "default_icon": "icon.png"
    }
}

background.js

chrome.browserAction.onClicked.addListener(function() {
    console.log("alert from background.js");
    chrome.tabs.executeScript({file: "jquery-2.0.2.min.js"}, function() {
        console.log("jquery Loaded");
    });
    chrome.tabs.executeScript({file: "content.js"}, function() {
        console.log("content loaded");
    });
});

content.js

console.log('you\'r in the world of content.js');
var ans = {};

ans.createSidebar = function() {

    return {
        init: function(){
            alert("why hello there");
        }
    }
}();

ans.createSidebar.init();

Я могу получить первые 3 console.log заявления, которые будут отображаться в отладчике фоновой страницы. Я также могу получить предупреждение от content.js, чтобы появиться на любом веб-сайте. Но я не могу видеть console.log из content.js, и я не могу просмотреть какой-либо JS из content.js. Я пробовал посмотреть в разделе "Контент-контент" на вкладке Источники отладки фоновой страницы. Несколько других сообщений на SO предложили добавить операторы debugger;, чтобы показать их, но мне не повезло ни с чем. Самое близкое решение, которое я видел, этот пост, но делается путем перечисления содержимого script в манифесте.

Любая помощь будет оценена по достоинству. Спасибо!

4b9b3361

Ответ 1

Консольные сообщения консольных сообщений отображаются в консоли веб-страницы вместо инспектора справочной страницы.

Добавление debugger; будет работать, если откроется инструмент разработчика (для веб-страницы, на которой вставляется ваш контент script).

Поэтому в этом случае вы должны сначала активировать инструмент разработчика (веб-страницы), прежде чем нажимать значок действия браузера, и все должно работать нормально.

Ответ 2

Я попытался использовать метод debugger, но он не работает хорошо, потому что проект использует require.js для связывания файлов javascript.

Если вы также используете require.js для разработки расширения chrome, вы можете попробовать добавить что-то вроде this к базе кода, а изменить eval(xhr.responseText) до eval(xhr.responseText + "\n//@ sourceURL=" + url);. (например, question)

Затем вы можете увидеть исходный файл в своем инструменте dev (но не в фоновом html-окне)