代码之家  ›  专栏  ›  技术社区  ›  sangoko

Userscript只能在后端提供的页面上工作,但不能以SPA方式在前端工作

  •  3
  • sangoko  · 技术社区  · 7 年前

    facebook.com

    // ==UserScript==
    // @name        facebook
    // @namespace   nms
    // @include     http://*.facebook.com/*
    // @include     https://*.facebook.com/*
    // @version     1
    // @grant       none
    // ==/UserScript==
    
    setTimeout( () => {
        // generalStuff:
            document.querySelectorAll(' #left_nav_section_nodes, .fbChatSidebar ').forEach( (e)=> {
                e.style.visibility = "hidden";
            });
    
    }, 1000);
    

    如果我在控制台上运行这个脚本,即使是在基于HRO的网页中,它也可以运行,但当从Greasemoneky/Tampermonkey运行时,它不会在这些特定的网页中运行。

    我怎样才能使脚本在类似SPA的网页上正常工作?

    1 回复  |  直到 7 年前
        1
  •  5
  •   DjaouadNM    5 年前

    setTimeout , setInterval

    以下代码用于替换用AJAX加载的数据,而不是直接从PHP加载的数据:

    let utilityFunc = ()=> {
        var run = (url)=> {
           // insert your code here
        };
    
        var pS = window.history.pushState;
        var rS = window.history.replaceState;
    
        window.history.pushState = function(a, b, url) {
            run(url);
            pS.apply(this, arguments);
        };
    
        window.history.replaceState = function(a, b, url) {
            run(url);
            rS.apply(this, arguments);
        };
    
    utilityFunc();
    

    here