マニフェストだけでこれを行うことはできません。プログラムで CSS を挿入する必要があります。
参考:Chrome、「マッチパターンとグロブ」
大小さまざまな問題:
解決:
- CSS にはクラスを使用し、エレメント CSS を直接変更しないでください。これは切り替えを容易にするためです。
- プログラムで CSS を挿入します。
- イベントをリッスンして
hashchange
、ターゲット要素から新しいクラスをいつ削除するかを認識します。
拡張機能の例を次に示します。
マニフェスト.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"]
}
ブロッカー.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");
}
}
}