0

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

manifest.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" 
    ] 

} 

background.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']); 

Заранее спасибо за любые советы!

+0

'browserAction' означает значок в адресной строки (омнибокс), см [АНИ документы] (https://developer.chrome.com/extensions/browserAction). В противном случае вам понадобится фоновый скрипт и [webRequest] (https://developer.chrome.com/extensions/webRequest) или [webNavigation] (https://developer.chrome.com/extensions/webNavigation) API. Уточните вопрос, пожалуйста. – wOxxOm

+0

Попробуйте "lastFocusedWindow: true" вместо "currentWindow: true" – ak2ln

+0

@wOxxOm Спасибо! Очень новичок в расширениях Chrome, поэтому я пытался взломать разные примеры, что явно не так хорошо работает. Я обновил указанный выше вопрос и переписал структуру для использования фоновой страницы с API webRequest. Это, как говорится, все еще не работает. Любая идея, что не так? – user994585

ответ

2
  1. Используйте отладчик - нажмите вашего расширения background page на хроме: страница // расширения и перейти к 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'] 
); 
+0

Спасибо! Обновленный код, который вы предоставили, отлично работает. К сожалению, я столкнулся с еще одной проблемой ... Теперь я понял, что иногда у URL-адреса уже есть параметр, а иногда нет. Итак, мне нужно проверить, есть ли «?» в URL. Если есть, мне нужно добавить «& style = gridview», но в противном случае мне нужно добавить «? Style = gridview». Каков наилучший способ сделать это? Еще раз спасибо за вашу помощь! – user994585

+0

Есть много способов обойти это, например, использовать 'indexOf', см. Обновленный код. – wOxxOm

+0

Это сработало отлично. Благодаря! – user994585