background.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. let base_url = `https://webeditter.piaoquantv.com/`
  2. let dom = {}
  3. let array_file_buffer = []
  4. const HEADERS_TO_STRIP_LOWERCASE = [
  5. 'content-security-policy',
  6. 'x-frame-options',
  7. ];
  8. chrome.webRequest.onBeforeSendHeaders.addListener((details) => {
  9. let item = details.requestHeaders
  10. for (let i in item) {
  11. if (item[i].name.toLowerCase() == 'sec-fetch-dest') {
  12. item[i].value = 'document'
  13. }
  14. if (item[i].name.toLowerCase() == 'sec-fetch-site') {
  15. item[i].value = 'none'
  16. }
  17. // if (item[i].name.toLowerCase() == ':authority') {
  18. // console.log(item)
  19. // }
  20. // Host: chat.blockscan.com
  21. // Origin: https://chat.blockscan.com
  22. // if(){
  23. // }
  24. // SameSite=None; Secure
  25. }
  26. // details.requestHeaders = item
  27. // item[item.length-1].name = 'set-cookie'
  28. // item[item.length-1].value = 'SameSite=None; Secure'
  29. return { requestHeaders: item }
  30. }, { urls: ["<all_urls>"] }, ['blocking', 'requestHeaders']);
  31. chrome.webRequest.onHeadersReceived.addListener((details) => {
  32. let item = details.responseHeaders
  33. let arr= []
  34. for (let i in item) {
  35. if (!HEADERS_TO_STRIP_LOWERCASE.includes(item[i].name.toLowerCase())) {
  36. arr.push(item[i])
  37. }
  38. }
  39. return { responseHeaders: arr }
  40. }
  41. ,
  42. { urls: ["<all_urls>"] },
  43. ['blocking', 'responseHeaders', 'extraHeaders']);
  44. // 消息通讯
  45. chrome.runtime.onConnect.addListener(function (port) {
  46. port.onMessage.addListener(function (res) {
  47. console.log('成功:', res.index)
  48. switch (res.state) {
  49. case 'SEDN_FILE_START':
  50. sendFileStart(port, res)
  51. break
  52. case 'CHECK_MD5_START':
  53. hasAudioFileMd5(port, res.md5)
  54. break
  55. // case 'TEST_VIDEO':
  56. // getVideoM3d8(port)
  57. // break
  58. }
  59. })
  60. })
  61. function sendFileStart(port, res) {
  62. if (res.index == 0) {
  63. array_file_buffer = []
  64. }
  65. array_file_buffer.push(stringToArrayBuffer(res.buffer_str))
  66. if (res.end_index == res.index) {
  67. let file = new File(array_file_buffer, res.name, { type: res.type })
  68. port.postMessage({ state: 'SEDN_FILE_END', msg: 'ok' })
  69. uploadFile(port, file)
  70. }
  71. }
  72. function hasAudioFileMd5(port, md5) {
  73. let url = base_url + 'get_audio_file/' + md5
  74. // 网络请求
  75. let xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
  76. xhr.open("get", url, true); //post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。
  77. xhr.send()
  78. xhr.onreadystatechange = function () { //绑定响应状态事件监听函数
  79. if (xhr.readyState == 4) { //监听readyState状态
  80. if (xhr.status == 200 || xhr.status == 0) { //监听HTTP状态码
  81. let result = JSON.parse(xhr.responseText)
  82. port.postMessage({ state: 'CHECK_MD5_END', ...result })
  83. }
  84. }
  85. }
  86. }
  87. function uploadFile(port, file) {
  88. let start_time = new Date().getTime()
  89. let url = base_url + 'uploadfile'
  90. let xhr = new XMLHttpRequest();
  91. xhr.open("post", url, true); //post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。
  92. var formData = new FormData();
  93. formData.append('file', file);
  94. xhr.upload.onprogress = (e) => {
  95. let end_time = new Date().getTime()
  96. let bili = e.loaded / e.total
  97. if (bili == 1) {
  98. port.postMessage({ state: 'UPLOAD_FILE', bili })
  99. }
  100. if (end_time > (start_time + 1000)) {
  101. start_time = end_time
  102. port.postMessage({ state: 'UPLOAD_FILE', bili })
  103. }
  104. };
  105. xhr.onreadystatechange = function () { //绑定响应状态事件监听函数
  106. if (xhr.readyState == 4) { //监听readyState状态
  107. if (xhr.status == 200 || xhr.status == 0) { //监听HTTP状态码
  108. let result = JSON.parse(xhr.responseText)
  109. port.postMessage({ state: 'UPLOAD_FILE_END', ...result })
  110. }
  111. }
  112. }
  113. xhr.send(formData)
  114. }
  115. function getVideoM3d8(port) {
  116. let path = 'http://rescdn.yishihui.com/longvideo/transcode/video/2018-11-27/6708b592fdd64be6837754c221631ec01544102390923.m3u8'
  117. let ts_path = 'http://rescdn.yishihui.com/longvideo/transcode/video/2018-11-27/6708b592fdd64be6837754c221631ec01544102390923-00001.ts'
  118. let xhr = new XMLHttpRequest();
  119. xhr.open('GET', ts_path);
  120. // 接收的是 video/mp2t 二进制数据,并且arraybuffer类型方便后续直接处理
  121. xhr.responseType = "arraybuffer";
  122. xhr.send();
  123. xhr.onreadystatechange = function () {
  124. if (xhr.readyState == 4) {
  125. if (xhr.status == 200) {
  126. let str = arrayBufferToString(xhr.response)
  127. port.postMessage({ state: 'TEST_VIDEO', str })
  128. // transferFormat(xhr.response);
  129. } else {
  130. console.log('error');
  131. }
  132. }
  133. }
  134. }