=0) {
layer.confirm('发现你可能被问卷星作答次数限制。点击“确定”以尝试绕过该限制。如果没有效果,请尝试更换浏览器、重启路由器(或开关飞行模式)', {
btn: ['立即清理','取消'], //按钮
title: 'EasyWJX提示',
}, function(index){
deleteAllCookies();
clearCookie();
clearStorage();
checkNeedExpandPage();
layer.close(index)
}, function(){
checkNeedExpandPage();
console.log('取消清理cookie');
});
}
}
// 绕过微信限制
function bypassWechat(){
$("#zhezhao2").remove();
$("#divContent").removeClass('disabled').removeClass('isblur');
$("#ctlNext").text('破解后可能无法提交')
setTimeout(function () {
layer.msg('绕过限制后不能提交');
},500)
}
// 检查是否需要绕过微信限制
function checkNeedBypassWechat(){
if ($(".wxtxt").length >0) {
layer.confirm('监测到微信限制。是否需要移除限制并查看题目(可以查看题目但无法提交)', {
btn: ['立即绕过','取消'], //按钮
title: 'EasyWJX提示',
}, function(index){
bypassWechat();
layer.close(index)
}, function(){
console.log('取消绕过微信限制');
});
}
}
// 绕过企业版跳出限制
function bypassEnterprise(){
$('#ValError').css('display','none')
$('.fieldset').css('display','block')
}
// 检测是否需要绕过企业版跳出限制
function checkNeedBypassEnterprise(interval){
if ($(".fieldset").css('display') =='none') {
layer.confirm('监测到疑似问卷星企业版作答限制。是否需要移除限制并继续作答?', {
btn: ['立即绕过','取消'], //按钮
title: 'EasyWJX提示',
}, function(index){
bypassEnterprise();
layer.close(index)
}, function(){
console.log('取消绕过企业版限制');
clearInterval(interval)
});
}
}
// 展开分页
function expandPage() {
$('.fieldset').css('display','block')
$('#divSubmit').css('display','block')
$('#divMultiPage').css('display','none')
}
// 检测是否需要展开分页
function checkNeedExpandPage() {
if ($('.fieldset').length>1) {
layer.confirm('检测到该问卷是分页问卷,请问是否需要自动展开问卷?', {
btn: ['立即展开','取消'], //按钮
title: 'EasyWJX提示',
}, function(index){
expandPage();
checkNeedBypassWechat();
layer.close(index)
}, function(){
checkNeedBypassWechat();
console.log('取消展开问卷');
});
}
}
// 将所有在列表中的函数初始化到window全局变量
function initAllFuncToWindow() {
if (window.easywjx == undefined) {
window.easywjx = {}
}
// window.easywjx.getToolbox = getToolbox
for (var i=0; i
`+toolbox_ext.join(' ')+`
`
return toolbox_html
}
// 同步Manyinput的内容到真正的input标签
function syncManyinput() {
setInterval(function () {
var all_textCont = document.querySelectorAll('.textCont')
for (var i=0; i=0) {
radios[i].click()
}
}
} else {
console.log('radio:答案列表中的id和当前获取id不符合,跳过填写')
}
}
}
input(answer,id) {
var input = this.ans_ls_html[id].querySelector('.ui-input-text input')
if (input) {
if (answer.ques_id==id) {
input.value = answer.answer.split('|')[randomNum(0,answer.answer.split('|').length-1)];
} else {
console.log('input:答案列表中的id和当前获取id不符合,跳过填写')
}
}
}
checkbox(answer,id) {
var checkbox = this.ans_ls_html[id].querySelectorAll('.ui-checkbox')
if (checkbox.length!=0){
if (answer.ques_id==id && answer.kind=='checkbox') {
var ans_txt_ls = answer.answer.split('|')
for (var i=0; i=0) {
checkbox[j].click();
}
}
}
} else {
console.log('checkbox:答案列表中的id和当前获取id不符合,跳过填写')
}
}
}
manyinput(answer,id,elem) {
var [ques_ls, original_input_group] = parseManyinputAnswer(this.ans_ls_html[id], elem)
if (answer.ques_id==id && answer.kind=='manyinput') {
// 这里开始处理服务器上获取的整体题目,大致思路就是把现有内容replace掉然后就可以拿到两个带括号的答案内容。正确答案后面的括号没有内容,错误答案括号后有正确答案
var quesandans = answer.answer.split(' 题目ID:')[0];
for (var ij=0; ij=0){
true_ans = ans_res.replace('正确答案: ', '')
}
// 填入input内,这里可能会产生问题所以加上try
try{
original_input_group.querySelectorAll('.ui-input-text')[ij].value = true_ans
if (elem == '.textCont') {
original_input_group.querySelectorAll('.textCont')[ij].innerText = true_ans //当作多项填空填写
} else {
original_input_group.querySelectorAll('.bracket')[ij].querySelector('span .selection span span').innerText = true_ans //当作完形填空填写
}
}catch{}
}
}catch{}
}
}
}
}
// 填写全部答案
function writeAllAnswer(answer_ls, writeAnswer_class) {
var ans_ls_html = document.querySelectorAll('.field.ui-field-contain');
var writeAnswer = writeAnswer_class
console.log(answer_ls)
window.easywjx.answer_ls = answer_ls //test
for (var i=0; i')
for (var i=0; i {
setTimeout(() => {
resolve()
}, time * 1000)
})
}
// 通用函数,获取问卷ID
function getWJID(){
var localpath = window.location.pathname
var wj_id = 'none'
if (localpath.indexOf('/wjx/join')>=0) {
wj_id = getQueryString('activityid')
} else {
wj_id = localpath.replace('vm', '').replace('.aspx', '').replaceAll('/', '')
}
return wj_id
}
// 通用函数,插入dom
function insertAfter(newElement,targetElement){
var parent = targetElement.parentNode;
if(parent.lastChild == targetElement){
parent.appendChild(newElement);
}else{
parent.insertBefore(newElement,targetElement.nextSibling);
}
}
// 通用函数,转换dom
function parseDom(arg) {
var objE = document.createElement("div");
objE.innerHTML = arg;
return objE;
};
// 通用函数,获取get请求的一个参数
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]); return null;
}
//通用函数,复制内容
function copy_to_clipboard(txt_str){
const input = document.createElement('input');
document.body.appendChild(input);
input.setAttribute('value', txt_str);
input.select();
if (document.execCommand('copy')) {
document.execCommand('copy');
console.log('复制成功');
//Alert(500,'复制成功');
}
document.body.removeChild(input);
}
// 通用函数,清理cookie【方法1,最有效】
function clearCookie(){
// 这段代码来自其它脚本,为MIT协议,
var keys = document.cookie.match(/[^ =;]+(?==)/g);
if (keys) {
for (var i = keys.length; i--;) {
document.cookie = keys[i] + '=0;path=/;expires=' + new Date(0).toUTCString();
document.cookie = keys[i] + '=0;path=/;domain=' + document.domain + ';expires=' + new Date(0).toUTCString();
document.cookie = keys[i] + '=0;path=/;domain=ratingdog.cn;expires=' + new Date(0).toUTCString();
}
}
console.log("cookie数据已清除");
location.reload();
}
// 通用函数,清理cookie【方法2】
function deleteAllCookies() {
var cookies = document.cookie.split(";");
console.log(cookies)
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i];
var eqPos = cookie.indexOf("=");
var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
document.cookie = name +"=;";
//document.cookie = null
}
var cookies2 = document.cookie.split(";");
}
// 通用函数,清理storage
function clearStorage() {
localStorage.clear()
sessionStorage.clear()
}
function autoResizeDiv(id) {
//需要调整尺寸的div
let c = document.getElementById(id)
// body监听移动事件
document.querySelector('body').addEventListener('mousemove', move)
// 鼠标按下事件
c.addEventListener('mousedown', down)
// 鼠标松开事件
document.querySelector('body').addEventListener('mouseup', up)
// 是否开启尺寸修改
let resizeable = false
// 鼠标按下时的坐标,并在修改尺寸时保存上一个鼠标的位置
let clientX, clientY
// div可修改的最小宽高
let minW = 8, minH = 8
// 鼠标按下时的位置,使用n、s、w、e表示
let direc = ''
// 鼠标松开时结束尺寸修改
function up() {
resizeable = false
}
// 鼠标按下时开启尺寸修改
function down(e) {
let d = getDirection(e)
// 当位置为四个边和四个角时才开启尺寸修改
if (d !== '') {
resizeable = true
direc = d
clientX = e.clientX
clientY = e.clientY
}
}
// 下面是一些和搜索框拖动有关的函数
// 鼠标松开时结束尺寸修改
function up() {
resizeable = false
}
// 鼠标按下时开启尺寸修改
function down(e) {
let d = getDirection(e)
// 当位置为四个边和四个角时才开启尺寸修改
if (d !== '') {
resizeable = true
direc = d
clientX = e.clientX
clientY = e.clientY
}
}
// 鼠标移动事件
function move(e) {
let d = getDirection(e)
let cursor
if (d === '') cursor = 'default';
else cursor = d + '-resize';
// 修改鼠标显示效果
c.style.cursor = cursor;
// 当开启尺寸修改时,鼠标移动会修改div尺寸
if (resizeable) {
/*
// 鼠标按下的位置在右边,修改宽度
if (direc.indexOf('e') !== -1) {
c.style.width = Math.max(minW, c.offsetWidth + (e.clientX - clientX)) + 'px'
clientX = e.clientX
}
// 鼠标按下的位置在上部,修改高度
if (direc.indexOf('n') !== -1) {
c.style.height = Math.max(minH, c.offsetHeight + (clientY - e.clientY)) + 'px'
clientY = e.clientY
}
*/
// 鼠标按下的位置在底部,修改高度
if (direc.indexOf('s') !== -1) {
c.style.height = Math.max(minH, c.offsetHeight + (e.clientY - clientY)) + 'px'
clientY = e.clientY
}
/*
// 鼠标按下的位置在左边,修改宽度
if (direc.indexOf('w') !== -1) {
c.style.width = Math.max(minW, c.offsetWidth + (clientX - e.clientX)) + 'px'
clientX = e.clientX
}
*/
}
}
// 获取鼠标所在div的位置
function getDirection(ev) {
let xP, yP, offset, dir;
dir = '';
xP = ev.offsetX;
yP = ev.offsetY;
offset = 10;
if (yP < offset) dir += 'n';
else if (yP > c.offsetHeight - offset) dir += 's';
if (xP < offset) dir += 'w';
else if (xP > c.offsetWidth - offset) dir += 'e';
return dir;
}
}
})();