Лучший способ инжекта скрипта в Chrome Extension

409
17 мая 2017, 08:15

Задача: из background-скрипта получить код в текстовом представлении и добавить его в окно браузера как можно быстрее и в то же время чтобы это отработало.

Вот пример:

var i = localStorage;
var code = "console.log('Hello')";
chrome.tabs.onUpdated.addListener(function (c, changeInfo) {
    i['tab' + c] ? ++i['tab' + c] : i['tab' + c] = 1;
    if (i['tab' + c] == 1) {
        (function (с, code) {
            var s = code.replace(/\\/g, "\\\\");
            chrome.tabs.executeScript(с, {
                    code: '(function(){var scr = document.createElement("script"); scr.textContent = `' + s  + '`; (document.body || document.head).appendChild(scr);})();'
               });
            };
        })(с, code);
});
chrome.tabs.onRemoved.addListener(function (c) {
    delete i['tab' + c];
});
chrome.webNavigation.onCommitted.addListener(function (c) {
    (c['frameId'] === 0) ? (delete i['tab' + c['tabId']]) : void 0;
});
chrome.webNavigation.onBeforeNavigate.addListener(function (details) {
    var c = details.tabId;
    localStorage['tab' + c] ? void 0 : localStorage['tab' + c] = 0;
});

Этот пример работает, но дважды инжектит скрипт, если уже открыто окно, и расширение устанавливается позже, чем открыто окно.

READ ALSO
Почему на изменения DOM не реагирует Google plus

Почему на изменения DOM не реагирует Google plus

Добрый день, хотел написать себе скрипт для Google plus, который должен был мне помогать с комментариями, под опубликованными анонсами в сообществе

333
Авторизация и сессии при помощи php + ajax

Авторизация и сессии при помощи php + ajax

Пишу дипломную задачу и появился вопрос в связке php и ajaxЯ уже сделал БД, написал верстку логин-пейдж, скрипт php для проверки хешированных паролей

491
Как навесить событие на один из сабмитов в форме?

Как навесить событие на один из сабмитов в форме?

Есть форма с 2 сабмитами, необходимо отслеживать поле #field_1 и после запустить клик по кнопке #submit_1Накатал быстро на jQuery - но срабатывает, - подскажите...

305
Слайдер javascript при livereload

Слайдер javascript при livereload

Суть проблемы такова: использую редактор brackets со встроенным livereloadЕсть так же скрипт слайдера, когда подключаю его, то он работает, все переключается...

357