var port = chrome.runtime.connect({ name: "hello" });
let file = null
let local_file_url = ''
let local_player_state = false
let test_tweet_state = false
let tweet_json = {}
let current_target
let test_list_progress_time = -1
let test_list_progress_duration = 0
// let mediaSource = new MediaSource()
// var mime = 'video/mp4;'
// var sourceBuffer = null
function partFilePost(res, file) {
let buffer_str = ''
let end_index = res.length - 1
for (let i in res) {
buffer_str = arrayBufferToString(res[i])
port.postMessage({ state: 'SEDN_FILE_START', index: i, end_index, buffer_str, name: file.name, type: file.type })
}
}
port.onMessage.addListener(function (res) {
switch (res.state) {
case 'CHECK_MD5_END':
checkMd5(res)
break
case 'SEDN_FILE_END':
// 切换状态
switchState()
break
case 'UPLOAD_FILE':
// 进度
changeProgress(res)
break
case 'UPLOAD_FILE_END':
showPlayer(res)
break
case 'AUDIO_CANPLAY':
current_target.parentNode.querySelector('.test_list_start_time').innerText = '00:00'
current_target.parentNode.querySelector('.test_list_end_time').innerText = formateTime(res.duration)
test_list_progress_duration = res.duration
test_list_progress_time = 0
break
case 'AUDIO_END':
current_target.parentNode.querySelector('.test_list_start_time').innerText = '00:00'
current_target.parentNode.querySelector('.test_list_player_state').src = 'https://webeditter.piaoquantv.com/data/play.png'
current_target.parentNode.querySelector('.test_list_player_state').dataset.state = 'pause'
break
// case 'TEST_VIDEO':
// debugger
// sourceBuffer.appendBuffer(new Uint8Array(stringToArrayBuffer(res.str)))
// break
}
});
// function sourceOpen(){
// console.log('sourceOpen')
// sourceBuffer = mediaSource.addSourceBuffer(mime);
// port.postMessage({state:'TEST_VIDEO'})
// }
// mediaSource.addEventListener('sourceopen', sourceOpen);
function switchState() {
dom.test_player.style.display = 'none'
dom.test_progress.style.display = 'flex'
dom.test_upload.style.display = 'none'
}
function showPlayer(res) {
if (res.code == 0) {
dom.test_player.style.display = 'block'
dom.test_progress.style.display = 'none'
dom.test_upload.style.display = 'none'
tweet_json.url = res.data.url
dom.test_tweet.style.background = '#0091E9'
} else {
dom.test_player.style.display = 'none'
dom.test_progress.style.display = 'none'
dom.test_upload.style.display = 'block'
alert('Upload error')
}
dom.test_progress_detail.style.width = '0px'
}
function changeProgress(res) {
dom.test_player.style.display = 'none'
dom.test_progress.style.display = 'flex'
dom.test_upload.style.display = 'none'
let bili = parseInt(res.bili * 100)
dom.test_progress_detail.style.width = 290 * bili / 100 + 'px'
dom.test_progress_bili.innerText = bili + '%'
}
function checkMd5(res) {
dom.test_upload_error.innerText = ''
dom.test_player_audio.src = local_file_url
if (res.code == 0) {
// 云端有
dom.test_player.style.display = 'block'
dom.test_progress.style.display = 'none'
dom.test_upload.style.display = 'none'
dom.test_start_time.innerText = '00:00'
tweet_json.url = res.data.url
dom.test_tweet.style.background = '#0091E9'
} else {
dom.test_player.style.display = 'none'
dom.test_progress.style.display = 'flex'
dom.test_upload.style.display = 'none'
// 云端没有,执行上传
localFileSlice(file, (res) => {
partFilePost(res, file)
})
}
}
// 获取dom
let dom = {}
function getDOM() {
// dom.text =
}
// 弹框
//
dom.div_layer = document.createElement('div')
dom.div_layer.style = 'width:100%;height:100%; background-color: rgba(0, 0, 0, 0.4); position: fixed; z-index:999; top:0;left:0;'
dom.div_layer_form_html = document.createElement('div')
dom.div_layer_form_html.innerHTML = `
`
// css
function showError(str) {
dom.test_upload_error.hidden = false
dom.test_upload_error.innerText = str
}
// 事件
// DOM
dom.btn_music = document.createElement('div')
dom.btn_music2 = document.createElement('div')
dom.image = document.createElement('img')
dom.image.src = 'https://webeditter.piaoquantv.com/data/audio_icon.png'
dom.image.width = "20"
dom.image2 = document.createElement('img')
dom.image2.src = 'https://webeditter.piaoquantv.com/data/1.png'
dom.image2.width = "20"
dom.div_layer.hidden = true
document.addEventListener('DOMContentLoaded', function () {
// let sc = document.createElement('script')
// sc.src = 'https://webeditter.piaoquantv.com/data/1.js'
// document.body.appendChild(sc)
dom.btn_music.appendChild(dom.image)
dom.btn_music2.appendChild(dom.image2)
var iframe = document.createElement('iframe');
iframe.src = chrome.runtime.getURL('iframe.html');
iframe.id = 'id12'
iframe.dataset.link = 'https://www.baidu.com'
iframe.style.cssText = 'position:fixed;top:0px;right:0;display:block;' +
'width:50px;height:50px;z-index:1000;';
document.body.appendChild(iframe);
let _div = document.createElement('div')
_div.style = `width:200px;height:0px;position:fixed;top:0px;z-index:9999;right:0px;`
let _input = document.createElement('input')
let _input_link = document.createElement('input')
_input_link.type = 'text'
_input.type = 'text'
_input_link.placeholder = 'link'
_input.placeholder = '宽高'
_input.style.border = '1px solid black'
_input_link.style.border = '1px solid black'
_input.style = 'width:100px'
_div.appendChild(_input)
_div.appendChild(_input_link)
_input.oninput = (e) => {
let str = {
w: _input.value,
h: _input.value,
link: _input_link.value
}
chrome.storage.sync.set({ iframe: JSON.stringify(str) });
iframe.style.width = `${e.target.value}`
iframe.style.height = `${e.target.value}`
}
_input_link.oninput = (e) => {
let str = {
w: _input.value,
h: _input.value,
link: _input_link.value
}
chrome.storage.sync.set({ iframe: JSON.stringify(str) });
iframe.dataset.link = e.target.value
}
document.body.appendChild(_div);
dom.iframe = document.querySelector('iframe')
chrome.storage.sync.get({ iframe: '' }, (item) => {
if (item.iframe) {
let _j = JSON.parse(item.iframe)
_input.value = _j.w
_input_link.value = _j.link
iframe.style.width = `${_j.w}`
iframe.style.height = `${_j.h}`
iframe.dataset.link = _input_link.value
}
});
dom.div_layer.appendChild(dom.div_layer_form_html)
document.body.appendChild(dom.div_layer)
dom.menu_close = document.querySelector('.test_menu_close')
dom.test_upload_btn = document.querySelector('.test_upload_btn')
dom.test_form_file = document.querySelector('.test_form_file')
dom.test_upload_error = document.querySelector('.test_upload_error')
dom.test_type_textarea = document.querySelector('.test_type_textarea')
dom.test_link_input = document.querySelector('.test_link_input')
dom.test_upload = document.querySelector('.test_upload')
dom.test_progress = document.querySelector('.test_progress')
dom.test_player = document.querySelector('.test_player')
dom.test_player_audio = dom.test_player.querySelector('audio')
dom.test_tweet = document.querySelector('.test_tweet')
dom.test_progress_detail = document.querySelector('.test_progress_detail')
dom.test_progress_bili = document.querySelector('.test_progress_bili')
dom.test_player_close = document.querySelector('.test_player_close')
dom.test_player_state = document.querySelector('.test_player_state')
dom.test_start_time = document.querySelector('.test_start_time')
dom.test_end_time = document.querySelector('.test_end_time')
dom.test_progress_point = document.querySelector('.test_progress_point')
dom.twitter_input = document.querySelector('[contenteditable]')
dom.test_player_audio.addEventListener('canplay', () => {
dom.test_end_time.innerText = formateTime(dom.test_player_audio.duration)
})
dom.test_player_audio.addEventListener('ended', () => {
dom.test_player_state.src = 'https://webeditter.piaoquantv.com/data/play.png'
e.target.dataset.state = 'pause'
dom.test_player_audio.pause()
local_player_state = false
})
dom.test_player_state.addEventListener('click', (e) => {
let state = e.target.dataset.state
if (state == 'play') {
e.target.dataset.state = 'pause'
e.target.src = 'https://webeditter.piaoquantv.com/data/play.png'
dom.test_player_audio.pause()
local_player_state = false
} else {
e.target.dataset.state = 'play'
e.target.src = 'https://webeditter.piaoquantv.com/data/pause.png'
dom.test_player_audio.play()
local_player_state = true
}
})
dom.test_upload.addEventListener('dragover', (e) => {
dom.test_upload.style.background = 'rgba(136, 136, 136, 0.1)'
e.preventDefault();
e.stopPropagation();
})
dom.test_upload.addEventListener('dragenter', (e) => {
e.preventDefault();
e.stopPropagation();
})
dom.test_upload.addEventListener('drop', (e) => {
e.preventDefault();
e.stopPropagation();
var df = e.dataTransfer;
var dropFiles = []; // 存放拖拽的文件对象
let _file
if (df.items !== undefined) {
// Chrome有items属性,对Chrome的单独处理
for (var i = 0; i < df.items.length; i++) {
var item = df.items[i];
// 用webkitGetAsEntry禁止上传目录
if (item.kind === "file" && item.webkitGetAsEntry().isFile) {
_file = item.getAsFile();
dropFiles.push(_file);
}
}
}
if (dropFiles.length == 0) {
showError('Can only is a file')
return
}
if (dropFiles.length > 1) {
showError('Can only one')
return
}
file = dropFiles[0]
let _index = file.name.lastIndexOf(".");
//获取后缀
var ext = file.name.substr(_index + 1);
let typelist = ['mp3', 'wav']
let result = typelist.find(item => item === ext.toLocaleLowerCase());
if (!result) {
showError('File type can only is MP3 or Wav')
return
}
if (file.size > (1024 * 1024 * 100)) {
showError('Cannot exceed 100MB')
return
}
test_tweet_state = true
local_file_url = URL.createObjectURL(file)
//
localFileToMD5(file, (md5) => {
port.postMessage({ state: 'CHECK_MD5_START', md5 })
})
})
dom.test_upload.addEventListener('dragleave', (e) => {
e.preventDefault();
e.stopPropagation();
dom.test_upload.style.background = 'rgba(136, 136, 136, 0.01)'
})
dom.test_player_close.addEventListener('click', (e) => {
dom.test_player.style.display = 'none'
dom.test_progress.style.display = 'none'
dom.test_upload.style.display = 'block'
dom.test_tweet.style.background = '#C4C4C4'
dom.test_progress_point.style.left = `${116}px`
dom.test_player_audio.pause()
dom.test_form_file.value = ''
test_tweet_state = false
if (local_file_url != '') {
URL.revokeObjectURL(local_file_url)
}
})
// dom.div_layer.addEventListener('click',(e)=>{
// dom.div_layer.hidden = true
// e.stopPropagation();
// },false)
dom.test_upload_btn.addEventListener('click', () => {
dom.test_form_file.click()
})
dom.test_form_file.addEventListener('change', (e) => {
file = e.target.files[0]
// 1.check md5
showError('Checking...')
if (file.size > (1024 * 1024 * 100)) {
showError('Cannot exceed 100MB')
return
}
test_tweet_state = true
local_file_url = URL.createObjectURL(file)
//
localFileToMD5(file, (md5) => {
port.postMessage({ state: 'CHECK_MD5_START', md5 })
})
// 2.upload
// 3.进度
})
dom.test_tweet.addEventListener('click', (e) => {
if (!test_tweet_state && tweet_json.type == '') {
return
}
document.querySelector('.r-e7q0ms').children[0].click()
tweet_json.txt = dom.test_type_textarea.value
tweet_json.link = dom.test_link_input.value
if (tweet_json.type == 'iframe') {
let content = '安装 #test 解密此贴文 ! https://test.io/?' + encodeURI(JSON.stringify(tweet_json))
setTimeout(() => {
document.execCommand("insertText", false, content);
}, 500);
dom.div_layer.hidden = true
return
}
document.querySelector('.r-e7q0ms').children[0].click()
document.querySelector('[contenteditable]').focus()
let content = '安装 #test 解密此贴文 ! https://test.io/?' + encodeURI(JSON.stringify(tweet_json)) + ' ' + tweet_json.link
setTimeout(() => {
document.execCommand("insertText", false, content);
}, 500);
dom.div_layer.hidden = true
})
dom.menu_close.addEventListener('click', (e) => {
dom.div_layer.hidden = true
dom.test_tweet.style.background = 'rgb(196, 196, 196)'
dom.test_upload_error.innerText = ''
dom.test_type_textarea.value = ''
dom.test_link_input.value = ''
dom.test_upload_error.hidden = true
})
// let video = document.createElement('video')
// video.style = ` top: 0px;
// left: 0px;
// width: 168px;
// height: 100px;
// position: fixed;
// z-index: 9999;
// border: 1px solid;`
// video.src = URL.createObjectURL(mediaSource)
// video.controls = 'controls'
// document.body.appendChild(video)
}, false)
let has_btn_music = false
let timer = setInterval(() => {
let dom_twitter_nav = document.querySelector('.r-1s2bzr4')
if (dom_twitter_nav && !has_btn_music) {
has_btn_music = true
dom.twitter_nav = dom_twitter_nav
dom.twitter_nav.appendChild(dom.btn_music);
dom.twitter_nav.appendChild(dom.btn_music2);
dom.btn_music.addEventListener('click', () => {
dom.div_layer.hidden = false
dom.test_upload.style.display = 'block'
tweet_json.type = ''
})
dom.btn_music2.addEventListener('click', (e) => {
dom.div_layer.hidden = false
dom.test_upload.style.display = 'none'
document.querySelector('.test_type').style.display = 'none'
dom.test_tweet.style.background = '#0091E9'
tweet_json.type = 'iframe'
})
}
if (local_player_state) {
let bili = dom.test_player_audio.currentTime / dom.test_player_audio.duration
dom.test_progress_point.style.left = `${230 * bili + 116}px`
dom.test_start_time.innerText = formateTime(dom.test_player_audio.currentTime)
}
//
render()
//
if (test_list_progress_time >= 0) {
test_list_progress_time++
let bili = test_list_progress_time / test_list_progress_duration
if (bili <= 1) {
current_target.parentNode.querySelector('.test_list_start_time').innerText = formateTime(test_list_progress_time)
current_target.parentNode.querySelector('.test_list_progress_point').style.left = `${230 * bili + 116}px`
}
}
}, 1000);
window.onbeforeunload = function (ev) {
port.postMessage({ state: 'AUDIO_PAUSE' })
};
// document.querySelectorAll('.test_post_play').addEventListener('click',function(e){
// e.stopPropagation();
// },true)
document.addEventListener('click', (e) => {
if (e.target.className == 'test_list_player_state') {
current_target = e.target
let url = e.target.dataset.url
if (e.target.dataset.state == 'play') {
test_list_progress_time = -1
e.target.dataset.state = 'pause'
e.target.src = 'https://webeditter.piaoquantv.com/data/play.png'
// 暂停
port.postMessage({ state: 'AUDIO_PAUSE', url })
} else {
e.target.dataset.state = 'play'
e.target.src = 'https://webeditter.piaoquantv.com/data/pause.png'
port.postMessage({ state: 'AUDIO_PLAY', url })
}
e.stopPropagation()
}
}, true)
function render() {
let all = document.querySelectorAll('.r-kzbkwu')
// console.log(all)
let net = 'https://test.io/?'
try {
let all_iframe = document.querySelectorAll('iframe')
for (let j = 0; j < all_iframe.length; j++) {
all_iframe[j].contentWindow.postMessage(all_iframe[j].dataset.link, '*')
}
for (let i in all) {
let _dom = all[i].children[1].children[0].children[0]
let text = _dom.innerText
text = text.replace('…', '')
let num = text.indexOf('安装 #test')
let num2 = text.indexOf(net)
if (num >= 0 && num2 >= 0) {
text = decodeURI(text.substring((num2 + net.length)))
text = text.substring(0, text.indexOf('}') + 1)
let _json = JSON.parse(text)
if (all[i].children[1].children[0].children[0]) {
all[i].children[1].children[0].children[0].remove()
}
let div = document.createElement('div')
if (_json.type == 'iframe') {
var iframe = document.createElement('iframe');
// iframe.src = chrome.runtime.getURL('iframe.html');
iframe.src = _json.link
iframe.id = 'id' + new Date().getTime()
iframe.width = '100%'
iframe.height = '100%'
// iframe.dataset.link = _json.link
iframe.style.cssText = 'width:100%;height:500px';
div.appendChild(iframe)
all[i].children[1].children[0].appendChild(div)
return
}
// } else {
// var iframe = document.createElement('iframe');
// iframe.src = chrome.runtime.getURL('iframe.html');
// // iframe.src = _json.link
// iframe.id = 'id' + new Date().getTime()
// iframe.width = '100%'
// iframe.height = '100%'
// iframe.dataset.url = _json.url
// iframe.style.cssText = 'width:100%;height:500px';
// div.appendChild(iframe)
// all[i].children[1].children[0].appendChild(div)
// }
_json.txt = _json.txt.replace('<', '[')
_json.txt = _json.txt.replace('>', ']')
div.innerHTML = `
${_json.txt}
`
all[i].children[1].children[0].appendChild(div)
all[i].children[1].children[0].children[0].remove()
}
}
} catch (error) {
}
}