Executing Chrome extension onclick instead of page loadの複製ではなく、ユーザーがアイコンを押したときではなく、popup.htmlのボタンを押してスクリプトを実行する必要があるためです。ページのロードではなく、ボタンのクリックでcontent.jsを実行
これは私の最初のクロムエクステンションで、content.jsはページの読み込み時に動作するようになっていますが、ユーザーがpopup.htmlのボタンを押すと実行するだけです。私はあなたがmanifest.jsonにrun_at
を指定することができると知っていますが、ユーザがボタン(アイコンではなく)をクリックしたときにのみ実行され、私はpageAction
を使用していますので、文字 'g'を含んでいないURL上に出てきます。したがって、私のbackground.jsの仕様です。私はbackground.jsとcontent.jsの間のコミュニケーションに関して何かが欠けているに違いないと思っていますが、誰かが私が見逃していることを説明することができれば、とても失礼だと感じています。
{
"manifest_version": 2,
"name": "my extension",
"description": "it doesnt work",
"version": "0.1",
"background": {
"scripts": ["background.js"],
"persistent": false
},
"permissions": [
"declarativeContent"
],
"page_action": {
"default_popup": "popup.html"
},
"icons" : { "16": "16.png",
"48": "48.png",
"128": "128.png" },
"content_scripts": [
{
"js": ["content.js"],
"matches": ["<all_urls>"],
"run_at": "document_end"
}
]
}
Background.js:ここ
は私のmanifest.jsonをがある
chrome.runtime.onInstalled.addListener(function() {
chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
chrome.declarativeContent.onPageChanged.addRules([
{
conditions: [
new chrome.declarativeContent.PageStateMatcher({
pageUrl: { urlContains: 'g' },
})
],
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(null, {file: "content.js"});
}); ]
}
]);
});
});
Content.js:
document.addEventListener("DOMSubtreeModified", function(event){
if(document.getElementsByClassName(".class")) {
var x = document.querySelectorAll(".class");
var i;
for (i = 0; i < x.length; i++) {
x[i].style.visibility = "hidden";
} }
});
popup.html:
<html>
<head>
<script type="text/javascript" src="content.js"></script>
</head>
<body>
<p>Turn off <span>class, "class"</span></p>
<button type="button">Turn off</button>
</body>
</html>
一般に、ユーザーが「browserAction」ボタンをクリックしてユーザーのやりとりを開始する場合は、コンテンツスクリプトに[chrome.tabs.executeScript() '](https://developer.chrome)を挿入する必要があります。 com/extensions/tabs#method-executeScript)** ** a * manifest.json * 'content_script'エントリの代わりに。どちらの方法でも*同じ*スクリプトを注入したい場所は非常にまれです。 – Makyen