granded 发表于 2024-5-6 22:45:36

李恒道 发表于 2024-5-6 21:22
就是找关键的系统一定会执行到的api
利用基础API hook来执行我们的代码



懂了,那看来我还是直接另起炉灶快些,我这个是委派了一个自定义点击事件上传文件,我直接构造xhr快些。

granded 发表于 2024-5-6 23:08:18

李恒道 发表于 2024-5-6 21:22
就是找关键的系统一定会执行到的api
利用基础API hook来执行我们的代码



我突然发现他用了appendchild添加script,那我直接hook这个了哈哈

rhdom 发表于 2024-9-1 16:21:14

我今天实际试了一下,拦截后再执行原有脚本代码也达不到原有的效果,不知道为什么?

rhdom 发表于 2024-9-1 16:22:39

```
// ==UserScript==
// @name         拦截脚本加载
// @namespace    http://tampermonkey.net/
// @version      2024-09-01
// @descriptiontry to take over the world!
// @author       You
// @match      https://dailydictation.com/exercises/ielts-listening/cam19-test-3-part-2.1375/listen-and-type
// @icon         https://www.google.com/s2/favicons?sz=64&domain=dailydictation.com
// @grant      GM_xmlhttpRequest
// @grant      unsafeWindow
// @run-at       document-start
// @grant      GM_addElement
// ==/UserScript==

const origiforEach=unsafeWindow.Array.prototype.forEach

function runScript(){
    GM_xmlhttpRequest({
      url:"https://dailydictation.com/assets/appDictation.3872752ea90dfe30bc7c.js",
      method :"GET",
      headers: {
            "Content-type": "application/x-www-form-urlencoded"
      },
      onload:function(xhr){

            console.log(xhr.responseText);

            GM_addElement('script', {
                textContent: xhr.responseText // .replace('An({', 'false && An({')
            });
      }
    });
}

unsafeWindow.Array.prototype.forEach=function(...args){
    let err= new Error('大赦天下');
    // console.log('keys大赦天下',err)
    if(err.stack.indexOf('appDictation.3872752ea90dfe30bc7c.js')!==-1){
      console.log("拦截成功")
      runScript()
      throw err;
    }

    return origiforEach.call(this,...args)
}
```

rhdom 发表于 2024-9-1 16:24:03

@李恒道 大佬,能不能帮忙看看为什么

rhdom 发表于 2024-9-1 16:54:06

此外,我试了下GM_webRequest,只能工作于几个fetch类型的请求,script类型的不能拦截
GM_webRequest([
        { selector: '*dailydictation.com/*', action: 'cancel' }
], function(info, message, details) {
        console.log("Request Info:", info);
        console.log("Message:", message);
        console.log("Details:", details);
});

rhdom 发表于 2024-9-1 17:17:01

知道了,GM_webRequest可以,需要加上// @run-at       document-start
但是神奇的是,我重定向到另外一个地址后,执行效果就不一样了。(神奇了,raw.githubusercontent.com返回0KB,用jsdelivr转一下终于可以了。。。)

李恒道 发表于 2024-9-2 18:14:19

rhdom 发表于 2024-9-1 16:24
@李恒道 大佬,能不能帮忙看看为什么

哥哥下次尽量单开一个贴
我旅游去了今天刚回来QAQ

rhdom 发表于 2024-9-5 13:24:34

李恒道 发表于 2024-9-2 18:14
哥哥下次尽量单开一个贴
我旅游去了今天刚回来QAQ

{:4_110:}{:4_110:}{:4_110:}
页: 1 2 [3]
查看完整版本: 如何在脚本中拦截页面加载script