我在 Greasemonkey/Tampermonkey 上运行以下用户脚本。
我运行它facebook.com
它通过 HRO 从后端提供一些网页,在前端提供其他一些网页,就像单页应用程序 (SPA) 一样。
// ==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 的网页上也能正常工作?
在这种情况下,当setTimeout
, setInterval
,而事件委托本身不起作用,可以将实现它们的状态推入内存,然后用它替换现有状态,从而使网页的 DOM 内容发生变化。
下面的代码用于替换使用 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();
这是我从阅读中了解到的.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)