0

我有以下userscript我在Greasemonkey/Tampermonkey上運行。Userscript僅適用於從後端提供的頁面,但不適用於SPA方式的前端

我在facebook.com上運行它,它像一個單頁面應用程序(SPA)一樣,通過HRO在後端,引導以及其他一些在前端,前端,通過HRO提供服務。

// ==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的網頁上沒有問題地工作?

回答

0

在這種情況下,當setTiemout,setInterval和事件委託本身不起作用時,可以將實現它們的狀態推入內存,然後用它替換現有狀態,以便網頁的DOM內容將會改變。

這裏是用來替代將填充了而不是AJAJ直接從PHP數據代碼:

let utilityFunc =()=> { 
    var run = (run)=> { 
     // insert your code here 
    }; 

    var pS = window.history.pushState; 
    var rS = window.history.replaceState; 

    window.history.pushState = (a, b, url)=> { 
     run(url); 
     pS.apply(this, arguments); 
    }; 

    window.history.replaceState = (a, b, url)=> { 
     run(url); 
     rS.apply(this, arguments); 
    }; 

utilityFunc(); 

這是我從閱讀here理解。

相關問題