(url, callback)
| 11055 | |
| 11056 | let xhrFailed = false; |
| 11057 | function requestDoc(url, callback) { |
| 11058 | let postParams = url.match(/#p{(.*)}$/); |
| 11059 | if (postParams) { |
| 11060 | postParams = postParams[1]; |
| 11061 | url = url.replace(/#p{.*/, ""); |
| 11062 | } |
| 11063 | let ruleHeaders = ruleParser.curSiteRule.headers; |
| 11064 | let headers = { |
| 11065 | 'Referer': location.href, |
| 11066 | 'User-Agent': navigator.userAgent, |
| 11067 | 'accept': 'text/html,application/xhtml+xml,application/xml', |
| 11068 | "Content-Type": (postParams ? "application/x-www-form-urlencoded" : "text/html") + ";charset=" + charset |
| 11069 | }; |
| 11070 | if (ruleHeaders) { |
| 11071 | if (ruleHeaders.referer) { |
| 11072 | headers.referer = ruleHeaders.referer; |
| 11073 | } |
| 11074 | if (ruleHeaders.userAgent) { |
| 11075 | headers.userAgent = ruleHeaders.userAgent; |
| 11076 | } |
| 11077 | if (ruleHeaders.accept) { |
| 11078 | headers.accept = ruleHeaders.accept; |
| 11079 | } |
| 11080 | if (ruleHeaders.contentType) { |
| 11081 | headers.contentType = ruleHeaders.contentType; |
| 11082 | let ruleCharset = ruleHeaders.contentType.match(/charset\=([^;]+)/); |
| 11083 | if (ruleCharset) charset = ruleCharset[1]; |
| 11084 | } |
| 11085 | if (ruleHeaders.cookie) { |
| 11086 | headers.cookie = ruleHeaders.cookie; |
| 11087 | } |
| 11088 | } |
| 11089 | _GM_xmlhttpRequest({ |
| 11090 | url: url, |
| 11091 | method: postParams ? 'POST' : 'GET', |
| 11092 | data: postParams, |
| 11093 | overrideMimeType: 'text/html;charset=' + charset, |
| 11094 | headers: headers, |
| 11095 | timeout: 50000, |
| 11096 | onload: async function(res) { |
| 11097 | if (isPause) return callback(false); |
| 11098 | var doc = null, response = res.response; |
| 11099 | try { |
| 11100 | doc = document.implementation.createHTMLDocument(''); |
| 11101 | setHTML(doc.documentElement, response, doc); |
| 11102 | } catch (e) { |
| 11103 | debug('parse error:' + e.toString()); |
| 11104 | } |
| 11105 | let pageElement = null; |
| 11106 | let preCode = ruleParser.curSiteRule.pagePre; |
| 11107 | if (preCode) { |
| 11108 | try { |
| 11109 | let preResult; |
| 11110 | if (typeof preCode == 'function') { |
| 11111 | preResult = await preCode(response, doc); |
| 11112 | } else if (preCode.length == 2) { |
| 11113 | preResult = response.replace(new RegExp(preCode[0], "gi"), preCode[1]); |
| 11114 | } else { |
no test coverage detected