//在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()
// })