PUGE hace 7 meses
padre
commit
b73846f8e2
Se han modificado 5 ficheros con 123 adiciones y 222 borrados
  1. 1 1
      background.js
  2. 117 0
      content-script.js
  3. 3 90
      insert.js
  4. 1 130
      js/popup.js
  5. 1 1
      manifest.json

+ 1 - 1
background.js

@@ -83,7 +83,7 @@ chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
       const nowTime = Date.parse(new Date())
       // 缓存
       if (tempData && (tempData.time + 60 * 60 * 1000) > nowTime) {
-        // console.log('使用缓存返回!', tempData)
+        console.log('使用缓存返回!', tempData)
         sendResponse(clearData(tempData.data))
       } else {
         reGetData(message.url, (dataTemp) => {

+ 117 - 0
content-script.js

@@ -0,0 +1,117 @@
+function assistLoad() {
+    // 页面为加载完毕就不断等待
+    if (!document.body) {
+        setTimeout(() => {
+            assistLoad()
+        }, 500);
+        return
+    }
+    // 创建div元素
+    const newDiv = document.createElement('div');
+
+    // 设置div的内容和属性
+
+    newDiv.id = 'assistBox';
+    newDiv.className = 'assist-box';
+    newDiv.innerHTML = `
+        <img style="position: absolute;top: -6px;left: -13px;" onclick="window.assistBox.style.right = (window.assistBox.style.right == '-301px' ? '0' : '-301px')" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAA8CAYAAACw00AzAAABtklEQVRIie3WvU7bUBTA8b9vrKSGhKZqyAALWToQVYWhElM3pDbiG8aqcx+Al+jAAzCwdar6QVDLK3SgMDAa0g0JlGTDBmOw0bUasOHGyV2hZ7LO/d2jc+61ZPPQw5Dz2Qd/u405CbwD3piZzIDZRb0APgELnYTn+6jwEvAFyMSTGSGO7uIa8K1bTyL2/Bz4mXZHcbzRGbgXHgHm02Acv+8F43hKB4/qYEsHX+ngvuI/VuIgCMhms+Ryueg5FUvYbDZxXZdCoaDccIPzg4Mcn5ywWd+KXmrVhts2wpBnxSKNRoOv339gmib5fD6xITFgGIaUSsPYts1mvR7l5AwppxFSLpfZ+bPLr+1tBiwLwzDUWAiB4zg8HRqiMlbhwvdv1kwVNAzB8vIi1fFxWq3W/TYkdN0zzs895mZneFmtRlDOcQ9f+j5BGFCrvWVi4hXNf7DTb6KNU8ehUhnDemLRbrejI4vDRGVZRRgCz/OUMFFZLnYuQAWVR5cWjwYnvh+98IVO5WMdvKeDP+tgG/jdL5bxQQcfAh/7xTLWgdV+sYw1YBrYv5Mv9frfWAHmgNeA3w09wgCuAWMViFVtipj2AAAAAElFTkSuQmCC">
+    `;
+    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);
+    // 创建 iframe 并插入页面
+    const iframe = document.createElement('iframe');
+    iframe.src = 'https://demos.run/assist/index.html'; // 注意:必须同源或对方允许跨源
+    iframe.style.cssText = `width: 300px;height: 400px;border: none;`
+    setTimeout(() => {
+        window.assistBox.appendChild(iframe);
+    }, 0);
+    // 向 iframe 发送消息
+    iframe.onload = () => {
+        iframe.contentWindow.postMessage({
+            type: "onload",
+            value: location.href
+        }, '*');
+    };
+    function sendCallBack(callBackID, value) {
+        iframe.contentWindow.postMessage({
+            type: "callBack",
+            value,
+            callBackID
+        }, '*');
+    }
+
+    // 接收子页面发来的消息
+    window.addEventListener('message', (event) => {
+        console.log('来自子页面的消息:', event.data);
+        switch (event.data.type) {
+            // assistMsg('click','#shi')
+            case "click":
+                if (typeof event.data.value === "string") {
+                    document.querySelector(event.data.value).click()
+                } else {
+                    document.querySelectorAll(event.data.value[0])[event.data.value[1]].click()
+                }
+                
+                break;
+            // assistMsg('fetch', {
+            //   url: "https://obfuscator.lamp.run",
+            //   method: "POST",
+            //   body: "{\"code\":\"document.querySelector('.conn-box .show').innerHTML='gf'\"}",
+            //   redirect: "follow"
+            // })
+            case "querySelectorAll":
+                let returnList = []
+                document.querySelectorAll(event.data.value).forEach(element => {
+                    returnList.push({
+                    id: element.id,
+                    className: element.className,
+                    })
+                });
+                sendCallBack(event.data.callBackID, returnList)
+                break;
+            case "fetch":
+                fetch(event.data.value.url, event.data.value)
+                .then((response) => response.text())
+                .then((result) => {
+                    console.log(result)
+                    if (event.data.callBackID) {
+                    sendCallBack(event.data.callBackID, response)
+                    }
+                })
+                .catch((error) => console.error(error));
+                break;
+            case "closeWindow":
+                window.close();
+                break;
+            case "back":
+                history.back();
+                break;
+            case "localStorageGetItem":
+                sendCallBack(event.data.callBackID, localStorage.getItem(event.data.value))
+                break;
+            case "localStorageSetItem":
+                localStorage.setItem(event.data.value[0], event.data.value[1])
+                break;
+            case "removeAttribute":
+                document.querySelectorAll(event.data.value[0]).forEach(element => {
+                    element.removeAttribute(event.data.value[1])
+                });
+                break;
+            default:
+                break;
+        }
+    });
+}
+
+console.log('加载成功!')
+

+ 3 - 90
insert.js

@@ -1,108 +1,21 @@
 
-// let tempData = localStorage.getItem('tempData')
-// if (tempData) {
-//   tempData = JSON.parse(tempData)
-// }
-
-
-function addScr (data) {
-  if (!document.body) {
-    setTimeout(() => {
-      // console.info('尝试重新加载:' + data)
-      addScr (data)
-    }, 100);
-    return
-  }
-  var script = document.createElement("script");
-  script.type = "text/javascript";
-  script.charset = "UTF-8";
-  script.innerHTML = data;
-  document.body.appendChild(script)
-}
-
-function loadJS( url, callback ){
-  var script = document.createElement('script'),
-      fn = callback || function(){};
-  script.type = 'text/javascript';
-  //IE
-  if(script.readyState){
-      script.onreadystatechange = function(){
-          if( script.readyState == 'loaded' || script.readyState == 'complete' ){
-              script.onreadystatechange = null;
-              fn();
-          }
-      };
-  }else{
-      //其他浏览器
-      script.onload = function(){
-          fn();
-      };
-  }
-  script.src = url;
-  script.onerror = function() {
-    console.error(`脚本: ${url} 加载失败,正在重试!`)
-    setTimeout(() => {
-        loadJS(url, callback)
-    }, 1000);
-  }
-  document.getElementsByTagName('head')[0].appendChild(script);
-}
-
-function loadCSS (url) {
-  var headObj = document.getElementsByTagName('head')[0];
-  var cssObj = document.createElement('link');
-  cssObj.rel = 'stylesheet';
-  cssObj.href = url;
-  headObj.appendChild(cssObj);
-}
-
 // 判断是否有永久的加载数据
 
 if (localStorage.getItem('owoLoadData')) {
   const element = JSON.parse(localStorage.getItem('owoLoadData'))
   let urlStr = window.location.href
   if (new RegExp(element.url).test(urlStr)) {
-    setTimeout(() => {
-      if (element.script) {
-        element.script.forEach(element => {
-          loadJS(element)
-        });
-      }
-      if (element.style) {
-        element.style.forEach(element => {
-          loadCSS(element)
-        });
-      }
-      setTimeout(() => {
-        if (element.data) addScr(element.data)
-      }, 0);
-    }, element.delay || 0);
-    
+    assistLoad()
   }
 } else {
   // 尝试网络加载
   chrome.runtime.sendMessage({name:"getData", url: window.location.href},function(dataTemp){
-    // console.log(dataTemp)
+    console.log(dataTemp)
     if (!dataTemp) return
     let urlStr = window.location.href
     dataTemp.forEach(element => {
       if (new RegExp(element.url).test(urlStr)) {
-        setTimeout(() => {
-          if (element.script) {
-            JSON.parse(element.script).forEach(element => {
-              loadJS(element)
-            });
-          }
-          if (element.style) {
-            JSON.parse(element.style).forEach(element => {
-              loadCSS(element)
-            });
-          }
-          setTimeout(() => {
-            if (element.data) addScr(element.data)
-          }, 0);
-        }, element.delay || 0);
-        
+        assistLoad()
         return
       }
     })

+ 1 - 130
js/popup.js

@@ -111,141 +111,12 @@ function load() {
                       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 = `
-                              <img style="position: absolute;top: -6px;left: -13px;" onclick="window.assistBox.style.right = (window.assistBox.style.right == '-301px' ? '0' : '-301px')" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAA8CAYAAACw00AzAAABtklEQVRIie3WvU7bUBTA8b9vrKSGhKZqyAALWToQVYWhElM3pDbiG8aqcx+Al+jAAzCwdar6QVDLK3SgMDAa0g0JlGTDBmOw0bUasOHGyV2hZ7LO/d2jc+61ZPPQw5Dz2Qd/u405CbwD3piZzIDZRb0APgELnYTn+6jwEvAFyMSTGSGO7uIa8K1bTyL2/Bz4mXZHcbzRGbgXHgHm02Acv+8F43hKB4/qYEsHX+ngvuI/VuIgCMhms+Ryueg5FUvYbDZxXZdCoaDccIPzg4Mcn5ywWd+KXmrVhts2wpBnxSKNRoOv339gmib5fD6xITFgGIaUSsPYts1mvR7l5AwppxFSLpfZ+bPLr+1tBiwLwzDUWAiB4zg8HRqiMlbhwvdv1kwVNAzB8vIi1fFxWq3W/TYkdN0zzs895mZneFmtRlDOcQ9f+j5BGFCrvWVi4hXNf7DTb6KNU8ehUhnDemLRbrejI4vDRGVZRRgCz/OUMFFZLnYuQAWVR5cWjwYnvh+98IVO5WMdvKeDP+tgG/jdL5bxQQcfAh/7xTLWgdV+sYw1YBrYv5Mv9frfWAHmgNeA3w09wgCuAWMViFVtipj2AAAAAElFTkSuQmCC">
-                            `;
-                            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;
-                                }
-                            });
+                          assistLoad()
                         }
                     });
-                    }
                     break
                   }
                 }

+ 1 - 1
manifest.json

@@ -19,7 +19,7 @@
 	"content_scripts": [
 		{
 			"matches": ["<all_urls>"],
-			"js": ["insert.js"],
+			"js": ["insert.js", "content-script.js"],
 			"all_frames": true,
 			"run_at": "document_start"
 		}