请大神看下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;
})();
``` //@ run-at document-start这个对X浏览器基本无效
设置后在X浏览器。油猴脚本的加载时机是随机的,有的快有的慢。并不能保证最早注入
导致依赖这个document-start API的脚本失效,网页载入时,行为无法预测。
目前也找不到合适的解决方案,折中方案就是在网页载入完毕后,重新发送所有没有被拦截的网络请求。
另外,X浏览器还有一个跟其他管理器区别的特性,就是网址锚点变动后,脚本会重复加载。
比如你这个网址载入时会这样变化:
https://reabble.cn/app ==> https://reabble.cn/app#/login
这时脚本就会被加载两遍,我在其他管理器也没有发现这种特性。 这个太为难我们了...
X浏览器貌似论坛没见过有人用过
可以考虑每一步打个alert断点看看到底到哪里没执行
也可能脚本都没执行... 劫持fetch可能需要在元信息里面加一行
` //@ run-at document-start` 我用过X、Via等,对油猴API的支持没有想象中那么好,建议换Kiwi。 cxxjackie 发表于 2022-10-19 21:51
我用过X、Via等,对油猴API的支持没有想象中那么好,建议换Kiwi。
怪不到我via装油猴脚本没反应换kiwi了
页:
[1]