探索1979 发表于 2023-10-8 16:32

GM_webRequest和_GM_webRequest使用

本帖最后由 探索1979 于 2023-10-8 16:35 编辑

GM_webRequest是Tampermonkey提供的api,请问下面的_GM_webRequest那个平台提供的api 或者自定义,如果是平台提供的api,请大神提供官方api文档
var _GM_webRequest = /* @__PURE__ */ (() => typeof GM_webRequest != "undefined" ? GM_webRequest : void 0)();
function scrapingOn() {
    _GM_webRequest(
      [
      {
          selector: "https://xxxx*",
          action: "cancel"
      },
      {
          selector: "https://xxxx*",
          action: {
            redirect: "https://xxxx"
          }
      }
      ],
      (info) => {
      switch (info) {
          case "cancel":
            scraperPageStore.setState({
            pageContentLoaded: true
            });
            break;
          case "redirect":
            scraperPageStore.setState({
            isNewChapter: true
            });
            break;
      }
      }
    );
    preRenderContainerObserver.observe(document.documentElement, {
      childList: true,
      subtree: true
    });
    const unsub = subscribePageContentLoaded();
    scraperPageStore.setState({
      pageContentLoadedCleanUp: getPageContentLoadedCleanUpFunction(unsub)
    });
}
function scrapingOff() {
    scraperPageStore.getState().pageContentLoadedCleanUp();
    preRenderContainerObserver.disconnect();
    _GM_webRequest([], () => {
    });
}

kihlh 发表于 2023-10-8 18:23

本帖最后由 kihlh 于 2023-10-8 18:25 编辑

其实从全局里面获取 fetch 更好用,这个api太古老了也太繁琐了
头部添加 // @grant               unsafeWindow

// ==UserScript==
// @grant               unsafeWindow
// ==/UserScript==

try { if (typeof fetch === "undefined") { if (typeof unsafeWindow !== "undefined") fetch = unsafeWindow.fetch } } catch (E) { }

fetch("https://www.52pojie.com").then(data=>data.text()).then(data=>{
console.log(data);
})


如果您想了解官方文档:https://www.tampermonkey.net/documentation.php?locale=en
您所提及的API就在其中

探索1979 发表于 2023-10-8 19:37

kihlh 发表于 2023-10-8 18:23
其实从全局里面获取 fetch 更好用,这个api太古老了也太繁琐了
头部添加 // @grant               unsafeW ...

_GM_webRequest,这前面多一个“_”是什么功能,大神

kihlh 发表于 2023-10-8 20:36


var _GM_webRequest = /* @__PURE__ */ (() => typeof GM_webRequest != "undefined" ? GM_webRequest : void 0)();

他定义了一个 _GM_webRequest应该是为了防止找不到 GM_webRequest导致程序无法执行

typeof GM_webRequest != "undefined" ? GM_webRequest : void 0
这是一句三元
typeof GM_webRequest在js里面是判断变量类型这边他判断的是 GM_webRequest != "undefined"
代表了如果 GM_webRequest 这个东西如果存在则返回 GM_webRequest

所以我们现在就可以理解为
_GM_webRequest = GM_webRequest 没有则返回undefined (void 0)

他的作用我们假设GM_webRequest 没有被引入

if(!_GM_webRequest ){console.log("没有这个函数 但是我可以在这里另外处理 不会直接报错")}

if(!GM_webRequest ){console.log("直接报错 因为全局中不存在GM_webRequest")}

探索1979 发表于 2023-10-9 11:31

kihlh 发表于 2023-10-8 18:23
其实从全局里面获取 fetch 更好用,这个api太古老了也太繁琐了
头部添加 // @grant               unsafeW ...

大佬提供api文档,里面的的示例是这样书写的没带“_”,是什么原因,_GM_webRequest

kihlh 发表于 2023-10-9 16:09

我在4楼已经很详细的解析了为什么会有_
你可以把_理解为copyGM_webRequest

探索1979 发表于 2023-10-11 20:57

kihlh 发表于 2023-10-9 16:09
我在4楼已经很详细的解析了为什么会有_
你可以把_理解为copyGM_webRequest

谢谢大佬
页: [1]
查看完整版本: GM_webRequest和_GM_webRequest使用