unwake 发表于 2022-10-19 21:24:52

请大神看下X浏览器为什么不支持这个脚本

本帖最后由 unwake 于 2022-10-19 21:26 编辑

网站是通过fetch /api/user 来决定当前用户是不是VIP,我写了个脚本,通过替换返回值来伪装VIP用户
下面的脚本在edgev106桌面版本+tempermonkey测试通过,装到X浏览器上就无效。希望您能指出下面的脚本哪些地方
需要改动下,好适用于X浏览器


目标是fetch /api/user返回的
"paid":false,"paypal":false,"expired":true,"expireInDays":-346'
替换成
'"paid":true,"paypal":true,"expired":false,"expireInDays":346'
替换后的效果

![微信截图_20221019212006.png](data/attachment/forum/202210/19/212309qz8xy4vf5vxrr8rr.png)
```


但是我在手机X浏览器上却没有效果,请问为什么?

// ==UserScript==
// @name         ReabbleVIP
// @namespace    GuoQingyuan
// @version      0.1
// @descriptionChange your Reabble account to VIP
// @author       GuoQingyuan
// @match      https://reabble.cn/app
// @icon         https://reabble.cn/static/img/icons/favicon.ico
// @grant      none
// ==/UserScript==

(function() {
    'use strict';

    // Your code here...
    let oldfetch = fetch;
function fuckfetch() {
    return new Promise((resolve, reject) => {
      oldfetch.apply(this, arguments).then(response => {
            if (arguments.indexOf('/api/user') > -1) {


                const oldtext = response.text;
                response.text = function() {
                  return new Promise((resolve, reject) => {
                        oldtext.apply(this, arguments).then(result => {
                            result = result.replace('"paid":false,"paypal":false,"expired":true,"expireInDays":-','"paid":true,"paypal":true,"expired":false,"expireInDays":');
                            console.log(result)
                            resolve(result);
                        });
                  });
                };
            };
            resolve(response);
      });
    });
}
window.fetch = fuckfetch;
})();

```

voeoc 发表于 2022-10-19 21:24:53

//@ run-at document-start这个对X浏览器基本无效
设置后在X浏览器。油猴脚本的加载时机是随机的,有的快有的慢。并不能保证最早注入
导致依赖这个document-start API的脚本失效,网页载入时,行为无法预测。
目前也找不到合适的解决方案,折中方案就是在网页载入完毕后,重新发送所有没有被拦截的网络请求。

另外,X浏览器还有一个跟其他管理器区别的特性,就是网址锚点变动后,脚本会重复加载。
比如你这个网址载入时会这样变化:
https://reabble.cn/app ==> https://reabble.cn/app#/login
这时脚本就会被加载两遍,我在其他管理器也没有发现这种特性。

李恒道 发表于 2022-10-19 21:34:55

这个太为难我们了...
X浏览器貌似论坛没见过有人用过
可以考虑每一步打个alert断点看看到底到哪里没执行
也可能脚本都没执行...

steven026 发表于 2022-10-19 21:41:08

劫持fetch可能需要在元信息里面加一行
` //@ run-at document-start`

cxxjackie 发表于 2022-10-19 21:51:35

我用过X、Via等,对油猴API的支持没有想象中那么好,建议换Kiwi。

XXXMlin 发表于 2022-10-20 14:15:17

cxxjackie 发表于 2022-10-19 21:51
我用过X、Via等,对油猴API的支持没有想象中那么好,建议换Kiwi。

怪不到我via装油猴脚本没反应换kiwi了
页: [1]
查看完整版本: 请大神看下X浏览器为什么不支持这个脚本