//在popup.js 中调用 backgourd.js 中的变量和方法,很重要 var bg = chrome.extension.getBackgroundPage(); // bg.count = bg.count+1; // console.log(bg) const serverUrl = 'https://assist.lamp.run/assist' function owoReplaceAll(str, s1, s2) { while (str.indexOf(s1) >= 0) { str = str.replace(s1, s2) } return str } let userInfo = {} const getSchemeData = new Promise((resolve, reject) => { getCurrentTabId((tabInfo) => { setTimeout(() => { const myHeaders = new Headers(); myHeaders.append("Content-Type", "application/json"); fetch(`${serverUrl}?route=search&username=${userInfo.username || 'nologin'}`, { method: 'POST', headers: myHeaders, body: JSON.stringify({ "edition": 8, "url": tabInfo.url }), redirect: 'follow' }).then(data => data.json()).then(tabData => { tabData.tabInfo = tabInfo resolve(tabData) }) }, 100); }) }) // 获取当前选项卡ID function getCurrentTabId(callback) { chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { if(callback) callback(tabs.length ? tabs[0]: null); }) } // 登录按钮登录 document.getElementsByClassName('userInfo')[0].onclick = function () { if (!userInfo || !userInfo.username || !userInfo.password || !userInfo.session) { // aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa window.open(chrome.extension.getURL('options.html'), "_blank") } else { chrome.storage.sync.set({userInfo: {}}) chrome.runtime.sendMessage({name:"reloadUser"},function() {}) location.reload(); } } document.getElementsByClassName('clearTemp')[0].onclick = function () { chrome.runtime.sendMessage({name:"clear"},function() { alert('缓存清除成功!') }) } let dataCopy = null function load() { chrome.storage.sync.get('userInfo', function(data) { // alert(data) userInfo = data.userInfo if (!userInfo) { userInfo = {} } if (userInfo && userInfo.username && userInfo.password && userInfo.session) { document.querySelector('.userInfo').innerHTML = `${userInfo.username}` } // alert("页面加载完成!"); // 获取是否有脚本 getSchemeData.then((tabData) => { // console.log(tabData) const scriptBox = document.getElementsByClassName('script-box')[0] const data = tabData['data'] if (tabData.err !== 0 || data.length == 0) { scriptBox.classList.add('no-scheme') scriptBox.classList.remove('scheme') } else { dataCopy = data let buttonHtml = '' let ind = 0 data.forEach(element => { buttonHtml += `` ind++ }); document.querySelector('.button-box').innerHTML = buttonHtml scriptBox.classList.add('scheme') setTimeout(() => { const buttonList = document.getElementsByTagName('button') for (const key in buttonList) { if (Object.hasOwnProperty.call(buttonList, key)) { const element = buttonList[key]; element.onclick = function () { let index = this.getAttribute("data-ind") index = parseInt(index) let dataTempCopy = dataCopy[index] switch (dataTempCopy.type) { case 'run': { chrome.notifications.create(null, { type: 'basic', iconUrl: 'img/48.png', title: dataTempCopy.name, message: '远程方案已载入并运行!' }) // console.log(unescape(tabData.data)) function decodeOwo (value) { value = owoReplaceAll(value, "'", 'owovar1') value = owoReplaceAll(value, "`", 'owovar2') value = owoReplaceAll(value, '"', 'owovar3') value = owoReplaceAll(value, '$', 'owovar4') return value } if (dataTempCopy.data) { let execTwmp = ` function owoReplaceAll(str, s1, s2) { while (str.indexOf(s1) >= 0) { str = str.replace(s1, s2) } return str } function clearOwo (value) { value = owoReplaceAll(value, 'owovar1', "'") value = owoReplaceAll(value, 'owovar2', "\`") value = owoReplaceAll(value, 'owovar3', '"') value = owoReplaceAll(value, 'owovar4', '$') return value } var script = document.createElement("script"); script.type = "text/javascript"; script.charset = "UTF-8"; script.innerHTML = clearOwo(\`${decodeOwo(dataTempCopy.data)}\`); document.body.appendChild(script) ` chrome.tabs.executeScript(tabData.tabInfo.id, {code: execTwmp}) } if (dataTempCopy.style || dataTempCopy.script) { dataTempCopy.style = dataTempCopy.style || '[]' dataTempCopy.script = dataTempCopy.script || '[]' let temp = ` function loadScript(url, callback) { var script = document.createElement("script") script.type = "text/javascript"; if (script.readyState) { //IE script.onreadystatechange = function () { if (script.readyState == "loaded" || script.readyState == "complete") { script.onreadystatechange = null; if (callback) callback(); } }; } else { //Others script.onload = function () { if (callback) callback(); }; } script.src = url; var head = document.head || document.getElementsByTagName('head')[0]; head.appendChild(script); } function loadCSS (url) { var link = document.createElement("link"); link.rel = "stylesheet"; link.type = "text/css"; link.href = url; document.getElementsByTagName("head")[0].appendChild(link); } ${dataTempCopy.style}.forEach(element => { loadCSS(element) }); ${dataTempCopy.script}.forEach(element => { loadScript(element) }); ` chrome.scripting.executeScript({ target: { tabId: tabData.tabInfo.id }, func: () => { // 创建div元素 const newDiv = document.createElement('div'); // 设置div的内容和属性 newDiv.id = 'assistBox'; newDiv.className = 'assist-box'; newDiv.innerHTML = ` `; newDiv.style.cssText = ` position: fixed; right: 0; bottom: 20px; border: 1px solid #ccc; background-color: rgba(255, 255,255, 0.8); z-index: 99; transition: right 1s ease; `; // 将div插入到body的末尾 document.body.appendChild(newDiv); setTimeout(() => { // 创建 iframe 并插入页面 const iframe = document.createElement('iframe'); iframe.src = 'https://demos.run/assist/index.html'; // 注意:必须同源或对方允许跨源 iframe.style.cssText = `width: 300px;height: 400px;border: none;` window.assistBox.appendChild(iframe); // 向 iframe 发送消息 iframe.onload = () => { iframe.contentWindow.postMessage({ type: "onload", value: location.href }, '*'); }; }, 0); // 接收子页面发来的消息 window.addEventListener('message', (event) => { console.log('来自子页面的消息:', event.data); switch (event.data.type) { case "click": document.querySelector(event.data.value).click() break; case "fetch": fetch(event.data.value.url, event.data.value) .then((response) => response.text()) .then((result) => console.log(result)) .catch((error) => console.error(error)); default: break; } }); } }); } break } } } } } }, 0); } }) }) } load(); // document.getElementsByClassName('.no-script')[0].addEventListener("click", function(){ // load() // })