From 87f2abae802ed7d0165b8b8df02b9d0624b4fa3b Mon Sep 17 00:00:00 2001 From: iFish Date: Sat, 13 Sep 2014 15:58:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9F=A5=E7=A5=A8=E6=B5=81?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- RwTicketAssistantV2/app/background.js | 44 +++++++++++++++++++--- RwTicketAssistantV2/app/manifest.json | 2 +- Web12306/js/otn/queryticket.js | 29 ++++++++++++-- Web12306/js/otn/trainstationsuggest.js | 6 ++- Web12306/js/platform/media.js | 1 + Web12306/js/platform/webRequest.js | 11 +++--- Web12306/js/ui/ui-autosubmitform.js | 2 +- Web12306/js/ui/ui-trainlist.js | 7 +++- Web12306/js/ui/widget_sell_notification.js | 2 +- 9 files changed, 85 insertions(+), 19 deletions(-) diff --git a/RwTicketAssistantV2/app/background.js b/RwTicketAssistantV2/app/background.js index 94f56aa..d5664dd 100644 --- a/RwTicketAssistantV2/app/background.js +++ b/RwTicketAssistantV2/app/background.js @@ -122,6 +122,15 @@ var notification = (function () { chrome.windows.update((m.detail && m.detail.windowid), { drawAttention: true, focused: true, state: "maximized" }); } }); + chrome.runtime.onMessage.addListener(function (m, sender) { + if (!m || !m.action) + return; + + if (m.action === "attention" && sender.tab) { + chrome.tabs.update((m.detail && m.detail.tabid) || sender.tab.id, { active: true, highlighted: true }); + chrome.windows.update((m.detail && m.detail.windowid), { drawAttention: true, focused: true, state: "maximized" }); + } + }); }; return new notify(); @@ -428,12 +437,21 @@ var CFG_MANGER = (function () { return url.replace(qtc, escape(ntc)); }; + function parseCookies(v) { + var arr = {}; + v.split('; ').forEach(function (x) { var idx = x.indexOf("="); arr[x.substr(0, idx)] = x.substr(idx + 1); }); + return arr; + }; + function processRequest(details) { var url = details.url; var skipBlacklist = !CFG_MANGER.config.blockDynamicJs; var newHeaders = {}; + var newCookies = null; + var oldCookiesValue = null; + for (var i = 0; i < details.requestHeaders.length; ++i) { var h = details.requestHeaders[i]; var name = h.name; @@ -446,13 +464,21 @@ var CFG_MANGER = (function () { } else if (h.name == "Referer") { if (!newHeaders["Referer"] && value.indexOf("12306.cn") != -1) newHeaders["Referer"] = value; - } else if (name.indexOf("Fish-") != -1) { + } else if (name === "Cookie") { + oldCookiesValue = value; + newHeaders["Cookie"] = value; + } else if (name.indexOf("Fish-") !== -1) { name = name.substr(5); - if (!value) { - if (newHeaders[name]) - delete newHeaders[name]; + + if (name === "Cookie") { + newCookies = parseCookies(value); } else { - newHeaders[name] = value; + if (!value) { + if (newHeaders[name]) + delete newHeaders[name]; + } else { + newHeaders[name] = value; + } } skipBlacklist = true; } else if (!newHeaders[name]) { @@ -460,6 +486,14 @@ var CFG_MANGER = (function () { } } + if (newCookies) { + var oc = parseCookies(oldCookiesValue); + newCookies = _.extend({}, oc, newCookies); + newHeaders["Cookie"] = _.map(newCookies, function (v, k) { + return k + "=" + encodeURIComponent((v)); + }).join("; "); + } + var headerCollection = []; for (var i in newHeaders) { headerCollection.push({ name: i, value: newHeaders[i] }); diff --git a/RwTicketAssistantV2/app/manifest.json b/RwTicketAssistantV2/app/manifest.json index 6d73482..ba89e9d 100644 --- a/RwTicketAssistantV2/app/manifest.json +++ b/RwTicketAssistantV2/app/manifest.json @@ -56,7 +56,7 @@ "description": "12306订票助手 v7: 帮您订票的小助手 by 木鱼,全力为您的车票购买献计献策!", "key": "7k6gnXVACvUPU2DfslJgSrWJTHqIg5uwd+Kgl/5zSg==", "name": "猎豹抢票党/12306订票助手 V7", - "version": "7.1.1", + "version": "7.2.1", "manifest_version": 2, "icons": { "16": "icons/icon_16.png", diff --git a/Web12306/js/otn/queryticket.js b/Web12306/js/otn/queryticket.js index 83d9870..ef3ea57 100644 --- a/Web12306/js/otn/queryticket.js +++ b/Web12306/js/otn/queryticket.js @@ -4,6 +4,8 @@ var parser = require("../platform/parser.js"); var ev = require("../platform/EventObject.js"); + var extensionVersion = parseInt(document.body.dataset["targetExtensionVersion"].replace(/\./g, "")); + exports.events = new ev(); //记录参数 @@ -148,7 +150,7 @@ return trainData; }; - exports.queryTicket = function (from, to, date, student, noProcess, noAction) { + exports.queryTicket = function (from, fromName, to, toName, date, student, resign, noProcess, noAction) { var def = new $.Deferred(); var queryCount = 0; @@ -163,6 +165,19 @@ "leftTicketDTO.to_station": to, "purpose_codes": student ? "0X00" : "ADULT" }; + var cookie = (function (obj) { var arr = []; + _.forEach(obj, function (v, k) { arr.push(k + '=' + v); }); + return arr.join("; "); + })(extensionVersion >= 720 ? { + "_jc_save_fromStation": escape(fromName + "," + from), + "_jc_save_toStation": escape(toName + "," + to), + "_jc_save_fromDate": date, + "_jc_save_toDate": date, + "_jc_save_wfdc_flag": resign ? "gc" : "dc" + } : {}); + if (isLogOpen) { + exports.log(p, cookie); + } ajax.sendGet(queryTicketUrl, "leftTicket/init", p, "json", function () { //url changed? if (!this.model.status && this.model.c_url) { @@ -183,6 +198,8 @@ def.reject("重试次数过多,请重新点击查询按钮"); } + }, false, { + "Cookie": cookie }); }; var fetchTicketUrl = function () { @@ -217,11 +234,17 @@ return def.promise(); }; - exports.log = function (data) { + exports.log = function (data, cookies) { if (!isLogOpen || (lastLogTime && (new Date() - lastLogTime) < 5000)) return; lastLogTime = new Date(); - ajax.sendGet("leftTicket/log", "leftTicket/init", data, "json"); + ajax.sendGet("leftTicket/log", "leftTicket/init", data, "json", function() { + + },function() { + + }, false, { + "Cookie": cookies + }); }; exports.queryTrainStop = function (id, from, to, date) { diff --git a/Web12306/js/otn/trainstationsuggest.js b/Web12306/js/otn/trainstationsuggest.js index 7c6f14f..61bee24 100644 --- a/Web12306/js/otn/trainstationsuggest.js +++ b/Web12306/js/otn/trainstationsuggest.js @@ -120,7 +120,7 @@ } var t = serverSuggestion.pop(); - query.queryTicket(t.fromCode, t.toCode, t.date, cp.studentTicket, false, true) + query.queryTicket(t.fromCode, t.fromText, t.toCode, t.toText, t.date, cp.studentTicket, false, false, true) .done(function () { loaded.unshift(t); @@ -235,6 +235,10 @@ var ctx = { TSS: new TSS(), setQueryResult: function (result, queryCount) { + //改签或学生票,忽略 + if (cp.reisgn || cp.studentTicket) + return; + ctx.TSS.setQueryResult(result, queryCount); }, clearQueryResultCache: function () { diff --git a/Web12306/js/platform/media.js b/Web12306/js/platform/media.js index a98b68a..c7ed29b 100644 --- a/Web12306/js/platform/media.js +++ b/Web12306/js/platform/media.js @@ -20,6 +20,7 @@ exports.notify = function (title, content) { port.sendMessage({ action: "notify", title: title, content: content }); + port.sendMessage({ action: "attention" }); } $("#btn_stop_sound").click(exports.stop); diff --git a/Web12306/js/platform/webRequest.js b/Web12306/js/platform/webRequest.js index 1e5a5b0..1f1e440 100644 --- a/Web12306/js/platform/webRequest.js +++ b/Web12306/js/platform/webRequest.js @@ -16,7 +16,7 @@ define(function (require, exports, module) { if (url[4] === ":" || url[5] === ":") return url; return config.baseUri + url; }; - this.send = function (method, url, refer, data, responseType, done, failed, appendatt) { + this.send = function (method, url, refer, data, responseType, done, failed, appendatt, headers) { var def = new $.Deferred(); if (appendatt) { @@ -30,7 +30,8 @@ define(function (require, exports, module) { timeout: 120000, type: method, dataType: responseType, - refer: that.getFullUri(refer) + refer: that.getFullUri(refer), + headers: headers }; var e = new CustomEvent("ajaxproxy", { detail: { data: xhrData, index: ajaxCount++ }, cancelable: true }); @@ -77,7 +78,7 @@ define(function (require, exports, module) { return def; }; - this.sendGet = function (url, refer, data, responseType, done, failed, appendatt) { + this.sendGet = function (url, refer, data, responseType, done, failed, appendatt, headers) { /// 以GET模式发送AJAX请求 /// 要请求的地址 /// 请求的引用地址 @@ -85,9 +86,9 @@ define(function (require, exports, module) { /// 要请求的地址 /// 完成请求的回调 /// 请求失败的回调 - return that.send("GET", url, refer, data, responseType, done, failed, appendatt); + return that.send("GET", url, refer, data, responseType, done, failed, appendatt, headers); }; - this.sendPost = function (url, refer, data, responseType, done, failed, appendatt) { + this.sendPost = function (url, refer, data, responseType, done, failed, appendatt, headers) { var args = [].slice.call(arguments); args.unshift("POST"); return that.send.apply(this, args); diff --git a/Web12306/js/ui/ui-autosubmitform.js b/Web12306/js/ui/ui-autosubmitform.js index a5cc535..f1c1e04 100644 --- a/Web12306/js/ui/ui-autosubmitform.js +++ b/Web12306/js/ui/ui-autosubmitform.js @@ -354,7 +354,7 @@ queryLoadingRow.show(); queryErrorRow.hide(); - query.queryTicket(cp.fromCode, cp.toCode, cp.depDate, cp.studentTicket, true) + query.queryTicket(cp.fromCode, cp.fromText, cp.toCode, cp.toText, cp.depDate, cp.studentTicket, cp.resign || false, true) .done(function () { traindata = this; if (!this.original.length) { diff --git a/Web12306/js/ui/ui-trainlist.js b/Web12306/js/ui/ui-trainlist.js index 0745113..fd5f210 100644 --- a/Web12306/js/ui/ui-trainlist.js +++ b/Web12306/js/ui/ui-trainlist.js @@ -50,12 +50,15 @@ this.clear = function () { $("#result").empty(); }; - this.load = function (ui, from, to, date, stu) { + this.load = function (ui, from, fromText, to, toText, date, stu, resign) { ui = ui === undefined ? true : ui; from = from || sessMgr.currentProfile.fromCode; + fromText = fromText || sessMgr.currentProfile.fromText; to = to || sessMgr.currentProfile.toCode; + toText = toText || sessMgr.currentProfile.toText; date = date || sessMgr.currentProfile.depDate; stu = stu || sessMgr.currentProfile.studentTicket; + resign = resign || sessMgr.currentProfile.resign || false; if (!from || !to || !date) { mp.showMessagePopup("error", "亲,还没有设置查询的条件哦。"); @@ -73,7 +76,7 @@ tip.show(); } ticketQuery - .queryTicket(from, to, date, stu) + .queryTicket(from, fromText, to, toText, date, stu, resign) .done(function () { if (tip) { tip.setState("ok", "完成..."); diff --git a/Web12306/js/ui/widget_sell_notification.js b/Web12306/js/ui/widget_sell_notification.js index dd4e2cc..485b9d3 100644 --- a/Web12306/js/ui/widget_sell_notification.js +++ b/Web12306/js/ui/widget_sell_notification.js @@ -62,7 +62,7 @@ var tip = new mp.MessagePopup("loading", "正在查询中,请稍等..."); tip.show(); - query.queryTicket(sessMgr.currentProfile.fromCode, sessMgr.currentProfile.toCode, utility.formatDate(data.maxDate, 'yyyy-MM-dd'), sessMgr.currentProfile.studentTicket, true) + query.queryTicket(sessMgr.currentProfile.fromCode, sessMgr.currentProfile.fromText, sessMgr.currentProfile.toCode, sessMgr.currentProfile.toText, utility.formatDate(data.maxDate, 'yyyy-MM-dd'), sessMgr.currentProfile.studentTicket, sessMgr.currentProfile.resign || false, true) .done(function () { tip.setState("ok", "查询成功!"); tip.close();