Расширение Chrome: webNavigation при ограничении объема разрешений - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть расширение Chrome, которое отслеживает дополнительный параметр запроса в URL на определенных сайтах. Я добавляю функциональность на новый сайт, и проблема, с которой я сталкиваюсь, заключается в том, что сайт перенаправляет на другой URL-адрес и удаляет мой пользовательский запрос, прежде чем мой контент-скрипт сможет загрузиться.

Похоже, что я могу обойти это, используя webNavigation API в фоновом скрипте и добавив прослушиватель для chrome.webNavigation.onCommitted. Проблема заключается в том, что, добавив разрешения webNavigation в мой манифест, я теперь запрашиваю разрешение «Читать историю просмотров». Я потратил много времени, пытаясь ограничить объем моих разрешений на расширение для определенных сайтов, и я действительно не хочу просить пользователя о разрешении карт-бланш, как это.

Я нашел в SO две другие темы об этой проблеме, но в одной пользователь нашел обходной путь, который, я не думаю, сработает в моем случае (хотя, если у кого-то есть предложенный обходной путь У меня все уши), а другой предлагает , что, добавив фильтр к объявлению слушателя, он ограничит запрос разрешений. Этот ответ не был принят как правильный, и, действительно, я не вижу никакой разницы в разрешениях, независимо от того, есть ли у меня фильтр.

Разве просто невозможно добиться того, что я хотел бы сделать, а также ограничить сферу предупреждения о разрешениях? Или я что-то упустил? Спасибо.

Моя декларация слушателя webNavigation:

chrome.webNavigation.onCommitted.addListener(function(e) {
    //Can dig out my query parameter from e
    console.log(e);
},{
    url: [{hostContains: "[NAME OF HOST]"}]
});

1 Ответ

0 голосов
/ 12 ноября 2018

Я смог найти обходной путь для моей ситуации. Я не думаю, что это будет работать для всех, но использование webRequest API позволило мне перехватить запрос загрузки страницы перед перенаправлением и сохранить строку запроса для дальнейшего. API webRequest также не запрашивал никаких разрешений, кроме тех, которые я уже запрашивал, с помощью массива content-script> соответствия в моем файле manifest.json, что заставляет Chrome запрашивать разрешение «Чтение и изменение ваших данных для числа веб-сайтов ", а затем перечисляет эти веб-сайты.

chrome.webRequest.onBeforeRequest.addListener(
    function(details) {

        //details.url contains my query string 
        var url = details.url;
        return;
    }, {
        urls: ['*://*.mysite.com/*'],
        types: ['main_frame'] //Filters out all the js,css,ajax,etc requests
    }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...