梦泽宇 发表于 2023-9-24 17:34:37

实战百度自定义分享码求助

本帖最后由 梦泽宇 于 2023-9-24 17:43 编辑

> 本帖最后由 梦泽宇 于 2023-9-24 17:42 编辑

> 本帖最后由 梦泽宇 于 2023-9-24 17:37 编辑

*原教程链接:https://bbs.tampermonkey.net.cn/thread-877-1-1.html*
练习代码:

```
// ==UserScript==
// @name         EX——百度网盘
// @namespace    http://tampermonkey.net/
// @version      0.1
// @descriptiontry to take over the world!
// @author       You
// @match      https://pan.baidu.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=baidu.com
// @grant      none
// ==/UserScript==

// 1. 创建 XHR 对象
console.log("=============================")
// 2. 调用 open 函数,保存url——为了后续send修改时判断是否是需要的那个url
let hookOpen = XMLHttpRequest.prototype.open
XMLHttpRequest.prototype.open = (method, url, async, user, password) => {
    this._url = url
    console.log(this._url)
    return hookOpen.call(this, method, url, async, user, password)
}

let hookSend = XMLHttpRequest.prototype.send
XMLHttpRequest.prototype.send = () => {
    //找到需要的那个链接
    if(this._url && this._url.indexOf && this._url.indexOf("share/set")){
      //判断是否包含需要修改的数据
      console.log("链接:", this._url)
      console.log("参数:", arguments)
    }
    return hookSend()
}

```

问题:本人想在send函数里查看下筛选后的链接(this._url)和参数(arguments),但是运行了之后百度网盘官网出现如下错误,想请问这是啥问题?

!(data/attachment/forum/202309/24/173302yxwyefzdj99qxxx7.jpg)

Yiero 发表于 2023-9-24 17:34:38

1. 箭头函数的问题, 用箭头函数this都不知道指向哪里去了
2. 劫持的 `XMLHttpRequest.prototype.send` 返回的应该是一个函数, 而不是函数返回值


```js
// 1. 创建 XHR 对象
console.log("=============================")
// 2. 调用 open 函数,保存url——为了后续send修改时判断是否是需要的那个url
let hookOpen = XMLHttpRequest.prototype.open

/* 修改为普通匿名函数 */
XMLHttpRequest.prototype.open = function (method, url, async, user, password){
    this._url = url
    console.log(this._url)
    return hookOpen.call(this, method, url, async, user, password)
}

let hookSend = XMLHttpRequest.prototype.send
/* 修改为普通匿名函数 */
XMLHttpRequest.prototype.send = function (){
    //找到需要的那个链接
    if (this._url && this._url.indexOf && this._url.indexOf("share/set")) {
      //判断是否包含需要修改的数据
      console.log("链接:", this._url)
      console.log("参数:", arguments)
    }

    /* 返回函数 */
    return hookSend.call(this)
}
```

梦泽宇 发表于 2023-9-24 20:37:39

Yiero 发表于 2023-9-24 19:52
1. 箭头函数的问题, 用箭头函数this都不知道指向哪里去了
2. 劫持的 `XMLHttpRequest.prototype.send`...

哇,是这样呀{:4_115:},箭头函数有大坑,谢谢{:4_101:}

cxxjackie 发表于 2023-9-24 21:54:49

还有一个send可能带参数,不要漏了,否则post请求会出问题:
return hookSend.apply(this, arguments)

梦泽宇 发表于 2023-9-24 22:51:30

cxxjackie 发表于 2023-9-24 21:54
还有一个send可能带参数,不要漏了,否则post请求会出问题:

嗯嗯!够细的,谢谢C大{:4_106:}
页: [1]
查看完整版本: 实战百度自定义分享码求助