开发简单插件的步骤
1). 新建文件夹,文件夹包含manifest.json
的文件,内容如下
{
"manifest_version": 2,
"name": "灯塔在线",
"description": "灯塔在线-答题辅助",
"version": "1.0",
"icons": {
"128" : "icon.png"
},
"permissions": [
"tabs", "http://*/*","https://*/*"
],
"content_scripts": [
{"js":["jquery-3.3.1.min.js","actions.js"],"matches":["*://xxjs.dtdjzx.gov.cn/monidati.html","*://xxjs.dtdjzx.gov.cn/kaishijingsai.html"]}
]
}
解释: 在content_scripts属性中我们定义了一个匹配规则,当URL符合*://www.google.com/
规则的时候,就将js注入到页面中。
js:[]
如果有点三方的js依赖,需要放到数组第一个的位置。
2). 写js答题脚本,为了简单,直接调用
主要思路:提取问题、正则匹配答案、递归。
需要注意到是eq()
返回的jquery对象,但是[0]
下标的方式返回的是dom对象。
$(function() {
getStart();
});
function getStart() {
var targetLi = $("ul.W_ti_ul li:visible");
if(targetLi.length > 0) {
var firstLi = targetLi.eq(0);
var answerStrs = new Array();
if (/monidati.html/.test(window.location.href)) {
var question = $(firstLi[0]).find('h1 span.w_fz18').eq(1).text();
console.log(question);
console.log(firstLi);
answerStrs = searchAnswer(question, firstLi[0]);
}else if (/kaishijingsai.html/.test(window.location.href)) {
console.log(targetLi);
console.log(firstLi[0]);
var question = $(firstLi[0]).find('h1 span.W_ml10').eq(0).text();
console.log(question);
answerStrs = searchAnswer(question, firstLi[0]);
}else {
return;
}
var map = {
'A': 0,
'B': 1,
'C': 2,
'D': 3
};
if(answerStrs.length == 1) {
var index = map[answerStrs[0]];
firstLi.find('input[type=radio]').eq(index).click();
} else if(answerStrs.length > 1) {
for(var i = 0; i < answerStrs.length; i++) {
var chars = answerStrs[i];
var index = map[chars];
firstLi.find('input[type=checkbox]').eq(index).click();
}
}
if($('.w_btn_tab_down').hasClass('W_bgcol') && answerStrs.length != 0 ) {
return;
} else {
setTimeout(function() {
$('.w_btn_tab_down').click();
getStart();
},
10);
}
}
}
function searchAnswer(question, selections){
console.log('问题:' + question.trim());
eval("var reg = /(?<=" + question.trim() + ")[\\s\\S]*?(?=\\*{5})/g;");
var res = tikuString.match(reg);
if (res == null) {
console.log('未匹配到答案');
return new Array();
}
if (res.length > 0 ) {
var str = res[0].trim();
console.log(str);
var resultArray = str.split("\n");
console.log(resultArray);
var selectionDivs = $(selections).find('div.W_ml45');
var finialResultArray = new Array();
for (var i = 0; i < selectionDivs.length; i++) {
var node = selectionDivs.eq(i);
var textString = node.find('sapn').text();
var aswer = textString.split('.');
if (aswer.length > 0) {
var answord = aswer.pop();
console.log(answord);
for (var j = 0; j < resultArray.length; j++) {
var keyword = resultArray[j];
if (keyword.trim().replace(/\s/g,"") == answord.trim().replace(/\s/g,"") ) {
var xxAnswer = node.find('input').attr('value');
finialResultArray.push(xxAnswer);
}
}
}
}
console.log(finialResultArray);
return finialResultArray;
}
return new Array();
}
var tikuString = `《党章》要求,党的各级领导干部要坚持党的群众路线,自觉地接受党和群众的批评和监督,加强道德修养,讲党性、重品行、作表率,做到自重、自省、自警、自励,反对()和奢靡之风,反对任何滥用职权、谋求私利的行为。
形式主义
官僚主义
享乐主义
******************************
党的各级领导干部必须()、清正廉洁,模范地履行《党章》所规定的党员的各项义务。
信念坚定
为民服务
勤政务实
敢于担当
******************************
省略5000字
`;
TODO
可以完善的内容:
参考资料
这本书写的很用心 http://www.ituring.com.cn/book/1421