Вы не можете сделать это с помощью манифеста в одиночку, вы должны программно ввести CSS.
Ссылка: Chrome, "Match patterns and globs"
Несколько вопросов, большое малым:
- Chrome still has a bug whereby CSS injection ignores
exclude_globs
and exclude_matches
.
- Google активно использует хэштеги и параметры запроса, а
matches
и exclude_matches
не работают на них.
- Google активно использует AJAX, поэтому «новые» страницы не загружаются свежими. Это означает, что вы должны иметь возможность отключать все CSS, которые вы добавляете.
- Google использует
www.
. Ваши совпадения должны быть такими: " http://www.google.com/ "
.
" http://google.com "
недействителен для match
. Это даст ошибку:
Could not load extension from '{never you mind!}'. Invalid value for 'content_scripts[0].matches[0]': Empty path.
Решение:
- Используйте классы для вашего CSS, не изменять элемент CSS непосредственно. Это для удобства переключения.
- Программно вводить CSS.
- Слушайте событие
hashchange
, чтобы узнать, когда нужно удалить новые классы из целевых элементов.
Вот пример расширения:
manifest.json:
{
"manifest_version": 2,
"content_scripts": [ {
"js": [ "CSS_handler.js" ],
"matches": [ "http://www.google.com/", "https://www.google.com/" ],
"exclude_globs": [ "http://www.google.com/#*", "https://www.google.com/#*" ]
} ],
"name": "AJAX aware, CSS injection switching",
"description": "From SO 17395877. Inject at home page, not 'results' pages. css property fires incorrectly due to bug. Target pages (Google) load 'new' pages via AJAX.",
"version": "1",
"web_accessible_resources": ["blocker.css"]
}
blocker.css:
.mycsHide {
display: none !important;
}
CSS_handler.js:
var link = document.createElement ("link");
link.href = chrome.extension.getURL ("blocker.css");
link.type = "text/css";
link.rel = "stylesheet";
document.head.appendChild (link);
//-- Global vars
var cssSelectorsToHide = [
"#gbz",
"#gbx3"
];
var hideElems = true;
//-- Initial run on cold start or full reload.
fireOnNewPage();
//-- Run on "new" ajax pages.
window.addEventListener ("hashchange", fireOnNewPage, false);
function fireOnNewPage() {
/*-- Only hide if there is no hash or URL params.
The manifest makes sure there is no path.
*/
hideElems = ! (location.hash || location.search);
cssSelectorsToHide.forEach (setElemVisibility);
}
function setElemVisibility (selector) {
var nodes = document.querySelectorAll (selector);
//-- Add or remove our special CSS class...
for (var J = nodes.length - 1; J >= 0; --J) {
if (hideElems) {
nodes[J].classList.add ("mycsHide");
}
else {
nodes[J].classList.remove ("mycsHide");
}
}
}
В вашем предложении 'matches' нет« www ». – Barmar
Это не имеет значения – JSW189
Попробуйте изменить его на 'http: // google.com /', и если это не сработает, вы всегда можете добавить '' exclude_matches: ["http://google.com/поиск * "]' – BeardFist