Расширения Chrome DevTools network без открытия панели devtools

232
06 марта 2018, 05:34

Делаю расширение для Google Chrome, которое должно парсить запросы

В манифесте:

{"manifest_version": 2,
       ...
      "devtools_page": "devtools.html",
       ...
}

Страница devtools:

<!DOCTYPE html>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Devtools Page</title>
    <script src="devtools.js"></script>
  </head>
  <body>

</body></html>

В devtools.js:

function getParameterByName(name, url) {
    if (!url) url = window.location.href;
    name = name.replace(/[\[\]]/g, "\\$&");
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, " "));
}
chrome.devtools.network.onRequestFinished.addListener(
          function(request) {
            if (request.request.url.indexOf("MyParam=")>0) {
              chrome.devtools.inspectedWindow.eval(
                    'console.log("MyParam: " + unescape("' +
                    escape(getParameterByName("MyParam",request.request.url)) + '"))');
            }
      });

В консоль выводит нужный мне параметр.

НО ЭТО РАБОТАЕТ ТОЛЬКО ЕСЛИ ПРИ ЗАГРУЗКЕ ОТКРЫТЬ ПАНЕЛЬ DEVTOOLS (консоль, сеть итд)

Есть ли возможность сделать так в фоновом режиме, скрыто от пользователя, чтоб не открывать панель devtools каждый раз?

Answer 1

Как я и предполагал - не там искал)

Решение: В манифест:

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

В backround.js:

function getParameterByName(name, url) {
    if (!url) url = window.location.href;
    name = name.replace(/[\[\]]/g, "\\$&");
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, " "));
}

chrome.webRequest.onBeforeRequest.addListener(
        function(details) {
            if(details.url.indexOf("MyParam=")>0){
                console.log("MyParam: "+getParameterByName("MyParam",details.url));
            };
        }, {urls: ["<all_urls>"]},[]);

Выводит в консоль фоновой страницы нужный параметр

Если нужно вывести в консоль активной вкладки - делаем через

chrome.tabs.query({active:true},function(tabs){
                        chrome.tabs.executeScript(tabs[0].id,{code:"console.log(...)"});
                    });
READ ALSO
Как группировать checkbox по name?

Как группировать checkbox по name?

Как группировать checkbox по name?

387
Объект js в массив

Объект js в массив

У меня есть объект вида

244
Работа NVDA Screen Reader c aria-attributes

Работа NVDA Screen Reader c aria-attributes

Кто-нибудь сталкивался с проблемой - NVDA Screen Reader не читает aria-attributes, например такой как aria-labelledby ?

193