2013-11-15 2 views
0

Итак, я пытаюсь сделать расширение, которое будет применяться только к сайтам www.google.com/bbb и его подстраницам, например www.google.com/bbb/ccc, но не www.google.com/aaa.Расширение Chrome, использующее больше URL-адресов, чем должно быть

Мой Manifest имеет это для разрешений:

"permissions": ["tabs", "http://www.google.com/bbb*"], 

Но это все-таки применять к любой странице под www.google.com, а не только www.google.com/bbb, как я хочу, чтобы это.

Все это работает в background.js.

+0

Попробуйте '' http://www.google.com/bbb/* "' – megawac

+0

@megawac, без кубиков. Все еще применяется повсюду. – Vectera

+0

Что означает «применять» в этом контексте? Что именно делает ваше расширение? – gkalpak

ответ

0

Это не очень понятно из the docs, но (будучи его ошибка или особенность) матча паттерны-хозяева, которые могут быть объявлены в атрибуте манифеста, permissions, не заботится о пути:

"[scheme]:[host]/*" 

Он применим только к scheme и host и будет игнорировать часть path.


С you seem быть инъекционного prgrammatically, вы можете сделать фильтрацию на основе пути вручную:

/* In `manifest.json` */ 
... 
"permissions": [ 
    "tabs", 
    "http://www.google.com/" 
], 
... 

/* In `background.js` */ 
// ...some event was captured, involving tab <tabX>... 
... 
var urlRegex = /^http:\/\/www.google.com/bbb/; 
if (urlRegex.test(tabX.url)) { 
    injectCSS(tabX.id); 
} // ...else do not inject CSS 
... 

Примечание: Это может одинаково хорошо работать без "http://www.google.com/" но, в том числе, он более эффективен, так как он уменьшает количество URL-адресов, которые ваша фоновая страница должна будет проверять (и отклонять). То есть он будет иметь только проверить URL-адреса, начинающиеся с «http://www.google.com/»

0

Я знаю, что это старый вопрос, но это помогло мне после долгой охоты ... (╭ರ_ •)

Вы можете добавить свои файлы в файле "content_scripts" файла манифеста и использовать его свойство "matches", так же, как вы пишете свои "permissions" URL. Затем refine your content script matches, используя его "exclude_matches", "exclude_globs" и "include_globs" свойства (где «глобусы» - это фрагменты URL, которые вы хотите включить или исключить). Итак:

"content_scripts": [ 
    { 
     "matches": [ 
     "http://www.google.com/bbb/*" 
     ], 
     "js": [ 
     "src/inject/your_scripts.js" 
     ], 
     "css": [ 
     "src/inject/your_styles.css" 
     ], 
     "run_at": "document_end" 
    } 
    ], 

Имейте в виду, чтобы достичь вашего примера вам нужен "run_at": "document_end" так файлы впрыскивается сразу после того, как DOM будет завершена, но прежде, чем загружены subresources как изображения и кадры (по ссылкам выше). Надеюсь, это поможет кому-то!

Смежные вопросы