let base_url = `https://webeditter.piaoquantv.com/` let dom = {} let array_file_buffer = [] const HEADERS_TO_STRIP_LOWERCASE = [ 'content-security-policy', 'x-frame-options', ]; chrome.webRequest.onBeforeSendHeaders.addListener((details) => { let item = details.requestHeaders for (let i in item) { if (item[i].name.toLowerCase() == 'sec-fetch-dest') { item[i].value = 'document' } if (item[i].name.toLowerCase() == 'sec-fetch-site') { item[i].value = 'none' } // if (item[i].name.toLowerCase() == ':authority') { // console.log(item) // } // Host: chat.blockscan.com // Origin: https://chat.blockscan.com // if(){ // } // SameSite=None; Secure } // details.requestHeaders = item // item[item.length-1].name = 'set-cookie' // item[item.length-1].value = 'SameSite=None; Secure' return { requestHeaders: item } }, { urls: [""] }, ['blocking', 'requestHeaders']); chrome.webRequest.onHeadersReceived.addListener((details) => { let item = details.responseHeaders let arr= [] for (let i in item) { if (!HEADERS_TO_STRIP_LOWERCASE.includes(item[i].name.toLowerCase())) { arr.push(item[i]) } } return { responseHeaders: arr } } , { urls: [""] }, ['blocking', 'responseHeaders', 'extraHeaders']); // 消息通讯 chrome.runtime.onConnect.addListener(function (port) { port.onMessage.addListener(function (res) { console.log('成功:', res.index) switch (res.state) { case 'SEDN_FILE_START': sendFileStart(port, res) break case 'CHECK_MD5_START': hasAudioFileMd5(port, res.md5) break // case 'TEST_VIDEO': // getVideoM3d8(port) // break } }) }) function sendFileStart(port, res) { if (res.index == 0) { array_file_buffer = [] } array_file_buffer.push(stringToArrayBuffer(res.buffer_str)) if (res.end_index == res.index) { let file = new File(array_file_buffer, res.name, { type: res.type }) port.postMessage({ state: 'SEDN_FILE_END', msg: 'ok' }) uploadFile(port, file) } } function hasAudioFileMd5(port, md5) { let url = base_url + 'get_audio_file/' + md5 // 网络请求 let xhr = new XMLHttpRequest(); // XMLHttpRequest 对象 xhr.open("get", url, true); //post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。 xhr.send() xhr.onreadystatechange = function () { //绑定响应状态事件监听函数 if (xhr.readyState == 4) { //监听readyState状态 if (xhr.status == 200 || xhr.status == 0) { //监听HTTP状态码 let result = JSON.parse(xhr.responseText) port.postMessage({ state: 'CHECK_MD5_END', ...result }) } } } } function uploadFile(port, file) { let start_time = new Date().getTime() let url = base_url + 'uploadfile' let xhr = new XMLHttpRequest(); xhr.open("post", url, true); //post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。 var formData = new FormData(); formData.append('file', file); xhr.upload.onprogress = (e) => { let end_time = new Date().getTime() let bili = e.loaded / e.total if (bili == 1) { port.postMessage({ state: 'UPLOAD_FILE', bili }) } if (end_time > (start_time + 1000)) { start_time = end_time port.postMessage({ state: 'UPLOAD_FILE', bili }) } }; xhr.onreadystatechange = function () { //绑定响应状态事件监听函数 if (xhr.readyState == 4) { //监听readyState状态 if (xhr.status == 200 || xhr.status == 0) { //监听HTTP状态码 let result = JSON.parse(xhr.responseText) port.postMessage({ state: 'UPLOAD_FILE_END', ...result }) } } } xhr.send(formData) } function getVideoM3d8(port) { let path = 'http://rescdn.yishihui.com/longvideo/transcode/video/2018-11-27/6708b592fdd64be6837754c221631ec01544102390923.m3u8' let ts_path = 'http://rescdn.yishihui.com/longvideo/transcode/video/2018-11-27/6708b592fdd64be6837754c221631ec01544102390923-00001.ts' let xhr = new XMLHttpRequest(); xhr.open('GET', ts_path); // 接收的是 video/mp2t 二进制数据,并且arraybuffer类型方便后续直接处理 xhr.responseType = "arraybuffer"; xhr.send(); xhr.onreadystatechange = function () { if (xhr.readyState == 4) { if (xhr.status == 200) { let str = arrayBufferToString(xhr.response) port.postMessage({ state: 'TEST_VIDEO', str }) // transferFormat(xhr.response); } else { console.log('error'); } } } }