Расширение Chrome для перенаправления на URL-адрес с параметром

Я пытаюсь создать расширение Chrome, которое добавит параметр в конец URL-адреса, если URL-адрес соответствует заданному шаблону (*://*.mydomain.com/s/*). Ниже приведен файл манифеста и фоновый скрипт, который у меня есть, но я не могу заставить его работать. Что я делаю не так?

манифест.json:

{
  "manifest_version": 2,
  "name": "Search Grid View",
  "version": "0.1",
  "description": "Changes MyDomain.com search to grid view by default",

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

  "permissions": [
    "tabs",
    "webRequest",
    "*://*.mydomain.com/s/*",
    "webRequestBlocking"
  ]

}

фон.js:

chrome.webRequest.onBeforeRequest.addListener(
  function(details) {         
    var currentUrl = tabs[0].url;
    var newUrl = currentUrl + "&style=gridview"
    return { redirectUrl: newUrl};
  },
  {
    urls: [
      '*://*.mydomain.com/s/*'
    ],
    types: ['main_frame']
  },
  ['blocking']);

Заранее благодарю за любой совет!


person user994585    schedule 22.07.2015    source источник
comment
browserAction означает значок в адресной строке (омнибокс), см. документацию по API. В противном случае вам понадобится фоновый скрипт и webRequest или webNavigation. Уточните вопрос, пожалуйста.   -  person wOxxOm    schedule 22.07.2015
comment
Попробуйте lastFocusedWindow: true вместо currentWindow: true   -  person    schedule 22.07.2015
comment
@wOxxOm Спасибо! Очень новичок в расширениях Chrome, поэтому я пытался собрать разные примеры, которые явно не сработали. Я обновил вопрос выше и переписал структуру, чтобы использовать фоновую страницу с API webRequest. Скажем так, он все еще не работает. Есть идеи, что случилось?   -  person user994585    schedule 22.07.2015
comment
Попробуйте использовать код в этом вопросе, заменив значения соответствующим образом. Таким образом, вы измените URL-адрес перед его отправкой на сервер, устраняя мерцание при обновлении страницы.   -  person wOxxOm    schedule 22.07.2015
comment
@wOxxOm Я обновил код background.js, но ничего не происходит. Взгляните на обновленный код выше. Я также добавил разрешение webRequestBlocking в свой manifest.json, так как уверен, что это сейчас необходимо. Есть еще идеи?   -  person user994585    schedule 22.07.2015


Ответы (1)


  1. Используйте отладчик: нажмите background page своего расширения на странице chrome://extensions и переключитесь на панель Sources.
  2. Чтобы получить URL-адрес, используйте параметр обратного вызова onBeforeRequest.
  3. Проверьте, не изменился ли URL-адрес.

chrome.webRequest.onBeforeRequest.addListener(
    function(details) {
        return {
            redirectUrl: details.url + 
                (details.url.indexOf("?") == -1 ? "?" : "") +
                (details.url.indexOf("&style=gridview") == -1 ? "&style=gridview" : "")
        };
    },
    {urls: ['*://*.mydomain.com/s/*'], types: ['main_frame']},
    ['blocking']
);
person wOxxOm    schedule 22.07.2015
comment
Благодарю вас! Предоставленный вами обновленный код работает отлично. К сожалению, я столкнулся еще с одной проблемой... Теперь я понял, что иногда в URL уже есть параметр, а иногда нет. Итак, мне нужно проверить, есть ли ? в URL. Если есть, мне нужно добавить &style=gridview, но в противном случае мне нужно добавить ?style=gridview. Как лучше всего это сделать? Еще раз спасибо за вашу помощь! - person user994585; 22.07.2015
comment
Есть много способов сделать это, например, использовать indexOf, см. обновленный код. - person wOxxOm; 22.07.2015