我正在尝试为Chrome扩展程序创建一个选项网站。我想只是如果复选框1是启用脚本运行等...
我四处搜索,但我发现这个主题只有过时的线程。
这是我的扩展程序中的manifest.json
:
{
"name": "My First Extension",
"version": "1.0",
"manifest_version": 2,
"options_page": "options.html",
"description": "The first extension that I made.",
"content_scripts": [
{
"matches": ["http://*.example.com/*"],
"all_frames": true,
"js": ["script1.js", "script2.js"]
}
],
"browser_action": {
"default_icon": "icon.png"
},
"permissions": [
"tabs", "http://*.example.com/*"
]
}
options.html
:
<!DOCTYPE html>
<html>
<body class="uber-frame" i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize" style="font-family: 'Segoe UI', Tahoma, sans-serif; font-size: 125%">
<div id="main-content" align="center">
<div id="mainview">
<section id="scripts">
<h3>Scripts</h3>
<label>
<input type="checkbox" class=script1 >
<span>Enable Script 1</span>
</label>
<div>
<label>
<input type="checkbox" class=script2>
<span>Enable Script 2</span>
</label>
</div>
</section>
</div>
</div>
</body></html>
我不知道怎么能说扩展哪个脚本喊是活动的,哪个不是。 我想我需要另一个脚本来从复选框的类中获取值 可能我应该将内容脚本设置为背景脚本。 如果有人可以帮助我会很棒。
答案 0 :(得分:1)
好的,首先你应该在localstorage中保存选项数据,这样你就可以访问所有页面的数据。这使你的工作变得轻松。
为了操纵数据,我创建了一个名为global.js
的javascript文件。
此文件必须手动或options.html
包含在content.js
和manifest.json
的开头。
var localStoragePrefix = "myextension_";
var LS_options = localStoragePrefix + "options";
var Options = {
Scripts : [
{
name : "script 1",
path : "script1.js",
enable : false
},
{
name : "script 2",
path : "script2.js",
enable : false
}
]
};
function DB_setValue(name, value, callback) {
var obj = {};
obj[name] = value;
console.log("ayarlar kaydedildi");
console.log(obj);
chrome.storage.local.set(obj, function() {
if(callback) callback();
});
}
function DB_load(callback) {
chrome.storage.local.get(LS_options, function(r) {
if ($.isEmptyObject(r[LS_options])) {
DB_setValue(LS_options, Options, callback);
} else {
Options = r[LS_options];
callback();
}
});
}
function DB_save(callback) {
DB_setValue(LS_options, Options, function() {
if(callback) callback();
});
}
function DB_clear(callback) {
chrome.storage.local.remove(LS_options, function() {
if(callback) callback();
});
}
这是更新的options.html,你会看到包含一些js文件。
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript" src="globals.js"></script>
<script type="text/javascript" src="options.js"></script>
</head>
<body class="uber-frame" i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize" style="font-family: 'Segoe UI', Tahoma, sans-serif; font-size: 125%">
<div id="main-content" align="center">
<div id="mainview">
<section id="scripts">
<h3>Scripts</h3>
<div id="scriptTemplate" style="display:none">
<label>
<input type="checkbox" data-script = "script.js" />
<span>Enable Script</span>
</label>
</div>
</section>
</div>
</div>
</body>
</html>
事件处理程序附件位于options.js
文件中。
$(函数(){ DB_load(startOptionsPage); });
function startOptionsPage() {
$.each(Options.Scripts, function(index, script) {
var $scriptTemplate = $("#scriptTemplate").clone().show();
$scriptTemplate.find("label span").html("Enable " + script.name);
$scriptTemplate.find("label input[type='checkbox']")
.data("script", script.path)
.click(function() {
if ($(this).is(":checked")) {
script.enable = true;
} else {
script.enable = false;
}
DB_save(function() {
console.log("DB saved");
});
})
.prop('checked', script.enable);
$("#scripts").append($scriptTemplate);
});
}
在content.js
文件中,如果有一个选项,我们将获取选项并包含脚本。
DB_load(function() {
$.each(Options.Scripts, function(index, script) {
if (script.enable) {
$.getScript(chrome.extension.getURL(script.path), function() {
console.log(script.name + " was loaded!");
});
}
});
});
alert("Hello from script1");
alert("Hello from script2");
对于所有这些,您应该更新manifest.json
文件。
global.js
加入content_script
localstorage
最后这里是更新后的manifest.json
{
"name": "My First Extension",
"version": "1.0",
"manifest_version": 2,
"options_page": "options.html",
"description": "The first extension that I made.",
"content_scripts": [
{
"matches": ["http://stackoverflow.com/*"],
"all_frames": true,
"js": ["jquery.min.js","globals.js","content.js"],
"run_at": "document_end"
}
],
"browser_action": {
"default_icon": "icon.png"
},
"permissions": [
"tabs", "http://stackoverflow.com/*", "storage"
],
"web_accessible_resources": [
"script1.js",
"script2.js"
]
}
您的脚本文件夹应该是这样的,
您必须进行两项更改,
您将脚本添加到主文件夹,就像其他script1.js和script2.js一样,您也会将其添加到web_accessible_resources
的{{1}}。
您还将更新“global.js”,只需将新脚本对象添加到Options.Scripts数组即可。像这样。
manifest.json
就是这样。但是在加载新的更新之前不要忘记从chrome中删除扩展,因为旧的选项将保留在那里,如果不这样做,那将无法正常工作。