我决定尝试创建一个chrome扩展,并决定实施一个简单的扩展,这使我无法每天访问facebook / linkedin超过5次。
然而,我不断收到一些错误,我似乎无法调试。他们是:
奇怪的是,当它似乎在chrome API中定义时,它无法读取未定义的内容。
以下是我使用的文件:
的manifest.json
{
"manifest_version": 2,
"name": "Distract Me Not",
"version": "0.1",
"permissions": ["webNavigation"],
"content_scripts": [
{
"matches": [
"https://*.facebook.com/","https://*.linkedin.com/"
],
"js": ["content.js","jquery3.1.1.js","background.js"]
}
]
}
content.js
chrome.webNavigation.onCompleted.addListener(function(details) {
chrome.tabs.executeScript(details.tabId, {
file: 'background.js'
});
});
background.js
function getDate(){
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth()+1; //January is 0!
var yyyy = today.getFullYear();
if(dd<10) {
dd='0'+dd
}
if(mm<10) {
mm='0'+mm
}
today = dd+'/'+mm+'/'+yyyy;
return(today);
}
function main() {
appName = $.getJSON("settings.json" , function(json){
return json["appName"];
});
websiteLimits = $.getJSON("settings.json" , function(json){
return json["websiteLimits"];
});
currentPage = window.location.hostname;
currentWebsiteLimit = websiteLimits[currentPage];
checkFor = appName + getDate();
item = localStorage.getItem(checkFor);
if (item) {
item = Number(item);
if (item > currentWebsiteLimit) {
document.write("Sorry! Your limit for " + currentPage + " has been reached for today.");
return;
}
localStorage.setItem(checkFor,item+1);
return;
}
localStorage.setItem(checkFor,1);
}
main();
settings.json
{"appName":"distract me not",
"websiteLimits":{"facebook.com":5,
"linkedin.com":5}
}
这看起来相当简单,但却暗示了我。我可能会遗漏一些简单的东西,并且会喜欢一些如何解决这个问题的指导!
谢谢! :)
更新:
我意识到文件应该是另一种顺序,并且我没有清除以前的错误,所以我被误导了同样的错误发生了。
但是,脚本似乎没有正确计数(content.js中的警报行警告两次重新加载)。有没有解决的办法?另外,我看到$ .getJSON无法获取本地文件。有没有办法可以将设置抽象到另一个json并加载它,或者这是唯一的方法吗?
非常感谢! :)
的manifest.json
{
"manifest_version": 2,
"name": "Distract Me Not",
"version": "0.1",
"permissions": ["webNavigation","tabs","https://*.facebook.com/","https://*.linkedin.com/"],
"background":{
"scripts":["background.js"]
},
"content_scripts": [
{
"matches": [
"https://*.facebook.com/","https://*.linkedin.com/"
],
"js": ["jquery3.1.1.js","content.js"]
}
]
}
content.js
function getDate(){
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth()+1; //January is 0!
var yyyy = today.getFullYear();
if(dd<10) {
dd='0'+dd
}
if(mm<10) {
mm='0'+mm
}
today = dd+'/'+mm+'/'+yyyy;
return(today);
}
function main(){
var settings = {"appName":"distract me not",
"websiteLimits":{"www.facebook.com":5,
"www.linkedin.com":5}
};
appName = settings["appName"];
websiteLimits = settings["websiteLimits"];
currentPage = window.location.hostname;
currentWebsiteLimit = websiteLimits[currentPage];
alert(currentPage);
checkFor = appName + getDate();
item = localStorage.getItem(checkFor);
if (item) {
item = Number(item);
if (item > currentWebsiteLimit) {
document.write("Sorry! Your limit for " + currentPage + " has been reached for today.");
return;
}
localStorage.setItem(checkFor,item+1);
return;
}
localStorage.setItem(checkFor,1);
}
main();
background.js
chrome.webNavigation.onCompleted.addListener(function(details) {
chrome.tabs.executeScript(details.tabId, {
file: 'content.js'
});
});
答案 0 :(得分:2)
每个页面重新加载时脚本运行两次,因为每次重新加载都会包含两次。
的manifest.json
...
"content_scripts": [
{
"matches": [
"https://*.facebook.com/","https://*.linkedin.com/"
],
"js": ["jquery3.1.1.js","content.js"]
}
...
此代码表示:“请将我的content.js
和jquery3.1.1.js
脚本包含在任何网页上,该网址与DOM Ready上的https://*.facebook.com/
或https://*.linkedin.com/
匹配。”
background.js
...
chrome.webNavigation.onCompleted.addListener(function(details) {
chrome.tabs.executeScript(details.tabId, {
file: 'content.js'
});
});
...
此代码表示:“每次content.js
触发”时,请运行webNavigation.onCompleted
。
正如您所看到的 - 加载LinkedIn时两个条件都是正确的,因此脚本content.js
运行两次,您会看到2个警报。
P.S&GT;您是否只想限制对LinkedIn主页的访问权限,而不是它的子页面是否正确?