簡體   English   中英

如何替換特定提取的結果?

[英]How can I replace the result of a specific fetch?

該網站使用fetch獲取 json 的列表視圖(通過 webpacked js,所以我無法重新設計它);

在 Tampermonkey 腳本中,我覆蓋了 fetch 以阻止它,修改它的參數並重新獲取,就像這樣,它工作正常。

// ==UserScript==
// @name         not important
// @version      0.23
// @namespace    none
// @match        https://www.aaaaaaaaaaaaaa.net/*

// ==/UserScript==
(function () {
    unsafeWindow.fetch = (...arg) => {
    if (arg[0].indexOf('limit=18') > -1) {
        arg[0] = arg[0].replace('limit=18', 'limit=180');
        return fetch(...arg);
    } else {
        return fetch(...arg);
    }

}


})();

180是api的限制;

但我並不滿意,因為 180 還不夠,所以我已經想辦法獲得 json,格式相同但結果為 1800。 有腳本:

var json =  (await (await fetch('https://www.abcdefg.net/ajax/illust/123456789/rec/init?limit=1&lang=zh')).json());

var jsonBody =json.body;
var array = [jsonBody.illusts[0].id];
var array2 = jsonBody.nextIds;
var combination = array.concat(array2);
jsonBody.nextIds = [];
jsonBody.illusts= [];

var illustComb = [];
for(let i = 0; i<5; i++)
{
    var jsonBody = (await (await fetch('https://www.abcdefg.net/ajax/illust/'+ combination[i]+'/rec/init?limit=1&lang=zh')).json()).body;
   illustComb= illustComb.concat(jsonBody.illusts);

}

var filtered = [];
for(let i = 0; i<illustComb.length; i++)
{
  if(! illustComb[i].isAdContainer == true)
   filtered.push(illustComb[i]);

}
jsonBody.illusts=filtered;
json.body = jsonBody;

return json;

我想用我自己的 json 來劫持 json,它包含更多的結果。

但是作為獲取,它返回一個 Promise 並且似乎不可能覆蓋如此巨大的 function; 而且似乎不是 ajax 請求,所以我不能不使用有關XMLHttpRequest的東西。

我是 Javascript 的新手,我知道的很少,所以任何線索/教程/信息將不勝感激,謝謝。

(function () {


    unsafeWindow.fetch = async (...arg) => {
         console.log('fetch arg', ...arg);  if (arg[0].indexOf('limit=18') > -1) {
        let illust_id = arg[0].match(/(?<=\/illust\/)\d+/)[0];
          arg[0] = arg[0].replace('limit=18', 'limit=180');
        var origjs =  (await (await fetch('https://www.abcdefg.net/ajax/illust/123456789/rec/init?limit=1&lang=zh')).json());

//omitted, refered to the question.


 origjs.body = jsonBody;

     let [resource, config] = arg; 
     let response = await fetch(resource, config); const json = () =>
      response
      .clone()
      .json()
      .then((data) => (data= origjs));

      response.json = json; 

      return response;

    } 
      else {
        return fetch(...arg);
    }

}


})();

參考: 攔截 JavaScript 獲取 API 請求和響應

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM