1火狐安装
安装
Greasemonkey
安装脚本
用户脚本的文件名必须以.user.js结尾
// ==UserScript==
// @name 未命名脚本 366261
// @version 1
// @grant none
// ==/UserScript==
一面火,一面冰.繁与简的完美结合,杂而不乱,一切本应就是井然有序
安装
Greasemonkey
用户脚本的文件名必须以.user.js结尾
// ==UserScript==
// @name 未命名脚本 366261
// @version 1
// @grant none
// ==/UserScript==
在 XPath 查询语句外使用双引号,这样在语句内就可以使用单引号了。
document.evaluate 方法中有很多参数。第二个参数(在前两个例子中都是 document)可以是任意元素。XPath 查询只返回这个元素的子元素结点。如果已有一个元素的引用(比如,从 document.getElementById 或者 document.getElementsByTagName 数组的一项中得到的引用),您就可以限制查询只返回这个元素的子元素。
第三个参数是对名称空间解析函数的引用,只有在 application/xhtml+xml 类型页面执行的用户脚本中才会用到。即使对它不了解也没关系,因为那种类型的页面不是很多,您可能一次也遇不到。如果您很想知道它的用法,Mozilla XPath 文档解释了它的用法。
第四个参数是结果的返回方式。在前面的两个例子中都使用了 XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,它返回的元素是随机次序的。我99%都是使用这种方式,但是,可能出于某种原因,想以在页面上出现的顺序返回结果,您可以使用 XPathResult.ORDERED_NODE_SNAPSHOT_TYPE。Mozilla XPath 文档还提
如果已找到某个元素(不论用何种方法),您想在它前面插入额外的内容。您可以使用 insertBefore 函数。
在主内容前插入 <hr>
假设有个元素的 ID 为 "main"。
var main, newElement;
main = document.getElementById('main');
if (main) {
newElement = document.createElement('hr');
main.parentNode.insertBefore(newElement, main);
}
// ==UserScript==
// @name orderStatus
// @namespace https://git.youhu.club/
// @description "获取订单号查询订单状态"
// @include http://admin.mall.10010.com/OdmQuery/ServiceOrderQuery/init
// @include http://admin.mall.10010.com/OdmQuery/Sell/Order/OrderDetails
// @include http://admin.mall.10010.com/OdmQuery/*
// @exclude http://diveintogreasemonkey.org/*
// @require https://unpkg.com/jquery@3.3.1/dist/jquery.min.js
// @grant none
// ==/UserScript==
(function(window)
{
alert('哈哈');
//获取url链接
var href = window.location.href;
console.log(href);
if(href == "http://admin.mall.10010.com/OdmQuery/ServiceOrderQuery/init")
{
//console.log('查询页');
// $.get('http://192.168.0.116:8001/api/store/lbk/order', function(data)
// {
// console.log(data);
// }.'json');
$.post('http://test.youhu.club/', {}, function(data, textStatus, xhr)
{
console.log(data);
},'json');
}
})(window)
(function(window) {
'use strict';
let isSend = false;
const url = 'https://rocky.zhuopu.net';
const getOrderUrl = url + '/api/store/jd/order';
const orderNotifyUrl = function(orderId) {
return url + '/api/store/jd/order/' + orderId + '/notify';
};
const numberKeyCode = [96,97,98,99,100,101,102,103,104,105];
// 加载 script
function loadScript(url, done) {
let script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
document.body.appendChild(script);
script.onload = script.onreadystatechange = function() {
if (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete') {
if (done) done();
}
script.onload = script.onreadystatechange = null;
};
}
// 获取 URL 后面的参数
function getUrlParam(name) {
let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)'); // 构造一个含有目标参数的正则表达式对象
let r = window.location.search.substr(1).match(reg); // 匹配目标参数
if (r != null) return unescape(r[2]);
return null; // 返回参数值
}
// 大王卡对象
function KingCard() {
this.$certName = $('#certName');
this.$certNo = $('#certNo');
this.$mobilePhone = $('#mobilePhone');
this.$address = $('#address');
this.$orderNoElement;
this.$ChoseMobile = $('#number').find('.p-content');
this.$province = $('#province');
this.$city = $('#city');
this.$postProvince = $('#post-province');
this.$postCity = $('#post-city');
this.$postDistrict = $('#post-district');
this.$mask = $('.mask');
this.$errorAll = $('#errorAll');
// 购买的号码
this.buyer_number = '';
}
// 初始化 王卡对象
KingCard.prototype.init = function() {
const $div = $('<div id="kingCard" class="btn-box"></div>');
$div.css({
position: 'absolute',
top: 0,
left: 0,
width: 'auto',
height: 'auto',
zIndex: 10000
});
const $orderBtn = $('<a href="javascript:void(0);"></a>');
$orderBtn.attr('id', 'getOrder');
$orderBtn.css({
display: 'inline-block',
backgroundColor: '#f57e1f',
margin: '10px 20px',
textDecoration: 'none',
fontSize: '1rem',
height: '2rem',
lineHeight: '2rem',
padding: '0 10px',
borderRadius: '.1875rem',
color: '#FFF'
});
$orderBtn.text('获取订单');
$orderBtn.on('click', this.handleClick.bind(this));
const $successBtn = $orderBtn.clone();
$successBtn.attr('id', 'orderSuccess');
$successBtn.text('订单成功');
$successBtn.on('click', this.handleClick.bind(this));
const $failBtn = $orderBtn.clone();
$failBtn.attr('id', 'orderFail');
$failBtn.text('订单失败');
$failBtn.on('click', this.handleClick.bind(this));
$div.append($orderBtn);
$div.append($successBtn);
$div.append($failBtn);
this.$orderNoElement = $('<p id="JDOrderId"></p>');
this.$orderNoElement.css({
fontSize: '20px',
padding: '10px',
color: '#999'
});
$div.append(this.$orderNoElement);
$('body').after($div);
};
// 按钮处理方法
KingCard.prototype.handleClick = function(evt) {
switch ($(evt.target).attr('id')) {
case 'getOrder':
this.getOrder();
break;
case 'orderSuccess':
this.orderStatus('produce_succeed');
break;
case 'orderFail':
this.orderStatus('produce_failed');
break;
}
};
// 获取订单 按钮 事件方法
KingCard.prototype.getOrder = function() {
const self = this;
let channel = getUrlParam('channel');
if (!channel) {
let param = getUrlParam('param');
if (param) {
if (param.startsWith('qZ6wqd4tEGk7')) {
channel = 'jl001';
} else if (param.startsWith('P2guLDMlC7Iab')) {
channel = '151';
}
}
}
if (isSend) {
alert('请先处理当前订单');
return;
}
isSend = true;
// 要比三个按钮的高度还要高,防止点过快
this.$mask.css('zIndex', 10001).show();
$.get(getOrderUrl, {
channel
})
.done(function(res, error) {
console.log(res);
isSend = false;
self.$mask.removeAttr('style');
const data = res.data;
if (data) {
self.$certName.val(data.buyer_name);
self.$certNo.val(data.id_card);
const mobile_arr = data.mobile.split('');
self.$mobilePhone.focus();
self.$mobilePhone.val(data.mobile);
self.$address.val(data.address);
window.localStorage.setItem('_kc_info', data.id);
let text = '订单号: ' + data.order_id;
data.buy_mobile ? (text = text + ' 购买号码: ' + data.buy_mobile) : '';
self.$orderNoElement.text(text);
self.buyer_number = data.buy_mobile;
self.choseArea(data);
self.randomNumber();
self.checkMobile();
} else {
alert('目前暂无需要生产的订单了,你可以稍事休息之后再来获取订单.');
}
})
.fail(function(err) {
console.log('网络异常');
console.log(err);
self.$mask.removeAttr('style');
alert('获取订单信息时发生网络错误,请联系技术.不要关闭当前页面.');
});
};
// 选择号码归属地以及所在地区
KingCard.prototype.choseArea = function(data) {
let local_province = data.location_province;
let local_city = data.location_city;
let province = data.province;
let city = data.city;
let county = data.county;
// 归属地
$.each(this.$province.children(), function(idx, ele) {
if (~local_province.indexOf(ele.innerText) || ~ele.innerText.indexOf(local_province)) {
$(ele).trigger('click');
return;
}
});
$.each(this.$city.children(), function(idx, ele) {
if (~local_city.indexOf(ele.innerText) || ~ele.innerText.indexOf(local_city)) {
$(ele).trigger('click');
return;
}
});
// 所在区域
$.each(this.$postProvince.children(), function(idx, ele) {
if (~province.indexOf(ele.innerText) || ~ele.innerText.indexOf(province)) {
$(ele).trigger('click');
return;
}
});
$.each(this.$postCity.children(), function(idx, ele) {
if (~city.indexOf(ele.innerText) || ~ele.innerText.indexOf(city)) {
$(ele).trigger('click');
return;
}
});
$.each(this.$postDistrict.children(), function(idx, ele) {
if (~county.indexOf(ele.innerText) || ~ele.innerText.indexOf(county)) {
$(ele).trigger('click');
return;
}
});
$('#number').trigger('click');
};
// 随机选个号码
KingCard.prototype.randomNumber = function() {
const self = this;
// 如果存在用户购买的号码,那就输入上然后去搜索下
if (this.buyer_number) {
$('#search').val(this.buyer_number.slice(-4));
setTimeout(function(){
document.getElementById('search-btn').click();
},500);
setTimeout(function() {
const lis = document.querySelectorAll('.number-list li');
if (lis.length === 0) {
self.randomNumber();
return;
}
for (let i = 0; i < lis.length; i++) {
if (lis[i].innerText.replace(/\n/g, '') == self.buyer_number) {
$(lis[i])
.children('a')[0]
.click();
break;
} else {
continue;
}
}
}, 800);
return;
}
setTimeout(function() {
const len = document.querySelectorAll('.number-list li').length;
if (len !== 0) {
const random = Math.floor(Math.random() * len);
$('#number-popup .number-list li')
.eq(random)
.children('a')[0]
.click();
} else {
self.randomNumber();
}
}, 800);
};
// 发送订单状态
KingCard.prototype.orderStatus = function(status) {
const self = this;
if (isSend) return;
let msg = '订单提交成功';
if (status === 'produce_failed') {
msg = window.prompt('请输入失败原因');
}
isSend = true;
// 防止点过快
this.$mask.css('zIndex', 10001).show();
const info = window.localStorage.getItem('_kc_info');
const id = info.split('|')[0];
const mobile = info.split('|')[1];
console.log('当前订单后台编号: ', id);
if (!id) {
alert('缺少当前订单号,请联系技术部门!不要关闭页面');
return;
}
$.post(orderNotifyUrl(id), {
status: status,
mobile: mobile,
remark: msg,
current_url: window.location.href
})
.done(function(res) {
console.log(res);
self.$mask.removeAttr('style');
window.localStorage.removeItem('_kc_info');
const msg = res.msg;
if (msg.code === 0) {
self.$certName.val('');
self.$certNo.val('');
self.$mobilePhone.val('');
self.$address.val('');
self.orderId = '';
self.$orderNoElement.text('');
if (res.data && res.data.next_url) {
window.location.href = res.data.next_url;
} else {
if (status === 'produce_succeed') {
alert('页面没有自动跳转,请联系技术,不要关闭当前页面.');
}
}
} else {
alert(msg.info);
}
})
.fail(function(err) {
console.error(err);
alert('后台更新订单状态市网络发生异常,请联系技术.不要关闭当前页面.');
});
};
// 检查是不是选完号码了
KingCard.prototype.checkMobile = function() {
const self = this;
setTimeout(function() {
let mobile = self.$ChoseMobile.text();
if (mobile) {
let id = window.localStorage.getItem('_kc_info');
window.localStorage.setItem('_kc_info', id + '|' + mobile);
} else {
self.checkMobile();
}
}, 500);
};
let kc = new KingCard();
kc.init();
})(window);
表示临时响应并需要请求者继续执行操作的状态代码。
http状态返回代码 代码 说明
100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。
表示成功处理了请求的状态代码。
http状态返回代码 代码 说明
200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
201 (已创建) 请求成功并且服务器创建了新的资源。
202 (已接受) 服务器已接受请求,但尚未处理。
203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。
204 (无内容) 服务器成功处理了请求,但没有返回任何内容。
205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。
206 (部分内容) 服务器成功处理了部分 GET 请求。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ajax的基本使用</title>
<style type="text/css">
#dvs
{
width:300px;
height:300px;
border:solid 1px blue;
}
</style>
</head>
<body>
<button>点击发送ajax</button>
<br/>
<div id="dvs"></div>
<script type="text/javascript">
//获取button节点元素
//因为是数组,所以需要加上[0];
var buts=document.getElementsByTagName('button')[0];
var dvs=document.getElementById('dvs');
buts.onclick=function()
{
//发送ajax请求
//1创建ajax对象
var x = new XMLHttpRequest;
//2触发ajax对象事件 on 当..时候 readystate ajax对象的属性 change 改变
x.onreadystatechange = function()
{
if(x.readyState == 4 && x.status==200)
{
//服务器返回结果
//console.log(x.responseText);
dvs.innerHTML=x.responseText;
}
}
//3.初始化
//1.参数 请求的方式
//2.参数 请求的处理数据的脚本
//3.参数 是否异步 true 异步 false 同步
x.open("GET","1ajax01.php",true);
//4.发送
x.send();
}
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>发送ajax请求 带参数</title>
<style type="text/css">
#dvs
{
width:300px;
height:360px;
border:solid 1px blue;
}
</style>
</head>
<body>
<button>get 带参数</button>
<div id='dvs'></div>
<script type="text/javascript">
//单击事件
//获取按钮元素
var buts=document.getElementsByTagName('button')[0];
//获取div元素
var dvs=document.getElementById('dvs');
var i=10;
//绑定事件
buts.addEventListener('click',function(){
//发送ajax
//1创建ajax对象
var x = new XMLHttpRequest;
//2触发事件
x.onreadystatechange=function()
{
//判断
if(x.readyState == 4 && x.status==200)
{
dvs.innerHTML='';
//console.log(x.responseText);
//创建img节点
var imgs=document.createElement('img');
//第一种方法
//imgs.src=x.responseText;
//第二种方法
imgs.setAttribute('src',x.responseText);
imgs.setAttribute('width','100%');
//把img插入到div里面
dvs.appendChild(imgs);
}
}
//3初始化
//get传值方式应该在初识化的时候带参数
x.open('GET','2get_canshu01.php?id='+i,true);
//4发送
x.send();
i++;
})
</script>
<script type="text/javascript">
//单击事件
/*var buts = document.getElementsByTagName('button')[0];
var dvs = document.getElementById('dvs');
var i = 10;
buts.addEventListener('click', function(){
//发送ajax
//1. 创建ajax对象
var x = new XMLHttpRequest;
//2.触发事件
x.onreadystatechange = function()
{
//判断
if(x.readyState == 4 && x.status == 200){
dvs.innerHTML = '';
// alert(x.responseText);
// console.log(x.responseText);
//创建节点 img
var imgs = document.createElement('img');
imgs.setAttribute('src',x.responseText);
imgs.setAttribute('width','100%');
//把img插入到div里面
dvs.appendChild(imgs);
}
}
//3.初始化
x.open('GET','2get_canshu01.php?id='+i, true);
//4.发送
x.send();
i++;
})
*/
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>3发送ajax post方式</title>
<style type="text/css">
#dvs{width:300px;height:300px;border:solid 1px blue;}
</style>
</head>
<body>
<button>post 请求方式</button>
<div id='dvs'></div>
<script type="text/javascript">
var buts=document.getElementsByTagName('button')[0];
var dvs= document.getElementById('dvs');
buts.onclick=function()
{
//1实例化
var x = new XMLHttpRequest;
//2触发事件
x.onreadystatechange=function()
{
//判断
if(x.readyState==4 && x.status==200)
{
//console.log(x.responseText);
dvs.innerHTML=x.responseText;
}
}
//初始化
x.open("POST","3post01.php",true);
x.setRequestHeader('content-type','application/x-www-form-urlencoded');
//发送
x.send('id=100&&name=www');
}
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>服务器响应结果</title>
<style type="text/css">
#dvs{width:300px;height:300px;border:solid 1px blue;}
</style>
</head>
<body>
<button>服务器响应结果</button>
<br/>
<div id='dvs'></div>
<script type="text/javascript">
var buts = document.getElementsByTagName('button')[0];
var dvs = document.getElementById('dvs');
buts.onclick=function()
{
//发送ajax请求
//创建ajax对象
var x = new XMLHttpRequest;
//触发事件
x.onreadystatechange=function()
{
//判断
if(x.readyState==4 && x.status==200)
{
//html 返回的是html文件 字符串
//console.log(typeof x.responseText);
//xml 返回的是xml文件 字符串
/*var parser = new DOMParser();
//这一行拼错了 var xlmDoc = parser.parseFromString(x.responseText,"text/xml");
var xmlDoc = parser.parseFromString(x.responseText,"text/xml");
var xs = xmlDoc.getElementsByTagName('country');
//console.log(xs);
var arr=[];
for(var i=0;i<xs.length;i++)
{
arr[i]=xs[i].innerHTML;
}
console.log(arr);*/
//索引数组
//console.log(typeof x.responseText);这样只是字符串
//使用eval函数把json字符串转化成 js数组对象
/*eval('var arr='+x.responseText);
for(var i=0;i<arr.length;i++)
{
console.log(arr[i]);
}*/
//关联数组
//一维数组 关联数组 返回的结果是js对象
/*eval('var arr ='+x.responseText);
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]);
};*/
//二维数组 返回的结果 外面是数组对象 里面是js对象
eval('var arr='+x.responseText)
{
for (var i = 0; i < arr.length; i++) {
console.log(arr[i].name);
};
}
}
}
//初始化
//请求html文件
//x.open("GET",'4response_html.html',true);
//请求xml文件
//x.open("GET",'4response_xml.xml',true);
//请求php
/*索引数组 关联数组 一维数组 二维数组*/
x.open("GET",'4response01.php',true);
//发送
x.send();
}
</script>
</body>
</html>