从Firefox 57开始过时。根据需要使用[greasemonkey-4]或[tampermonkey]。如果使用其他浏览器用户脚本引擎,请使用[userscripts]。
如何使用 GreaseMonkey/ViolentMonkey 从字符串中检索全局上下文变量?
当尝试从 Javascript 中的字符串检索全局上下文(通常是窗口)中定义的变量时,我知道您可以简单地这样做: var 测试变量 = 123; console.log(窗口["testVa...
问题涉及特定网站:NS.nl 上的门票订购。该页面上有一个用于输入电子邮件的文本输入字段,并且该字段已禁用 Ctrl-V(粘贴)。 问题:什么油猴
如何使用 Greasemonkey 在 javascript 中设置创建的事件的 `isTrusted` 属性
我想通过 Greasemonkey 中的用户脚本创建并触发 KeyPress 事件,但我观察到 createEvent 的 isTrusted 始终设置为 false。 isTrusted 是只读属性...
我的目标是使用 Firefox 中的 Greasemonkey 扩展将 menu.html 中的数组选项内的值从 a 更改为 d,但我的问题是我尝试选择/访问的元素被加载为...
脚本开头“(function() {”的用途(仅限 GreaseMonkey?)
我对 JavaScript 还很陌生,我正在自学。我目前正在创建和调整 GreaseMonkey 脚本。我注意到大多数简单的脚本(即那些不需要命名函数的脚本......
在 Mozilla Firefox 的每个页面上运行自定义 Javascript
我有一段自定义的Javascript,我想在特定域的每个网页上运行它,或者只是在每个网页上运行。 (如果您想知道:这不是恶意的。它允许
HackerNews (https://news.ycombinator.com/) 将已访问链接的颜色与未访问链接的颜色相似。我想将访问的链接设置为对比色。 我是 Tampermonkey 的新手(以及
HackerNews (https://news.ycombinator.com/) 将已访问链接的颜色与未访问链接的颜色相似。我想将访问的链接设置为对比色。 我是 Tampermonkey 的新手(以及
如何从 Greasemonkey 脚本拦截 XMLHttpRequest?
我想使用 Greasemonkey 捕获 AJAX 请求的内容。 有人知道该怎么做吗?
无法让 GM_notification 函数在 Tampermonkey 用户脚本(chrome、OSX)中工作
我正在尝试重写一些 Tampermonkey 脚本以使用一些内置的 TM/GM 函数,但我无法让它们工作。 GM_Notification 函数就是一个例子。 我正在使用它进行测试...
使用greasemonkey拦截并更改网站的javascript
假设有一个网站在 html 脚本标记中包含外部 .js 文件,如下所示: 我想让greatmonkey拦截每个这样的脚本,并改变一些......</desc> <question vote="12"> <p>假设有一个网站在 html 脚本标记中包含外部 .js 文件,如下所示:</p> <pre><code><script src="somescript.js"> </code></pre> <p>我希望greasemonkey拦截每个这样的脚本,并在执行之前更改其中的一些值。例如,我想将其中所有出现的值“400”更改为“300”,然后继续加载页面,就好像脚本使用这些值而不是原始值一样。目前我在greasemonkey中使用以下代码:</p> <pre><code>function replaceTargetJavascript (scriptNode) { var scriptSrc = scriptNode.textContent; scriptSrc = scriptSrc.replace ( /'400'/, "'300'" ); addJS_Node (scriptSrc); } document.addEventListener("beforescriptexecute", function(e) { checkForBadJavascripts ( [ [false, /'400'/, replaceTargetJavascript] ] ); }, true); </code></pre> <p>根据我的消息来源,这是正确的方法,但它不起作用。谁能帮我解决这个问题吗?</p> </question> <answer tick="true" vote="23"> <p>老问题,但我最近需要这样做。 这是我使用 GreaseMonkey 的方法。</p> <p>您添加 beforescriptexecute 侦听器,然后等待目标脚本加载,检查 src 标记以识别正确的脚本。</p> <p>然后您停止加载该脚本并使用 GM_xmlhttpRequest 自行获取脚本源。</p> <p>然后您可以随意修改脚本并将其插入回 DOM 中。</p> <pre><code>// ==UserScript== // @name Test // @namespace Test // @description TEST // @include http://the.website.com/* // @version 1 // @grant GM_xmlhttpRequest // @run-at document-start // ==/UserScript== function addScript(text) { text = text.replace(/replaceThis();/g, ""); var newScript = document.createElement('script'); newScript.type = "text/javascript"; newScript.textContent = text; var head = document.getElementsByTagName('head')[0]; head.appendChild(newScript); } window.addEventListener('beforescriptexecute', function(e) { src = e.target.src; if (src.search(/script_to_modify\.js/) != -1) { e.preventDefault(); e.stopPropagation(); GM_xmlhttpRequest({ method: "GET", url: e.target.src, onload: function(response) { addScript(response.responseText); } }); } }); </code></pre> </answer> <answer tick="false" vote="1"> <p>老问题,但我最近需要这样做,并且接受的答案使用非标准功能<pre><code>beforescriptexecute</code></pre>。</p> <p>它与已接受的答案基本相同,但使用 <a href="https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver" rel="nofollow noreferrer"><pre><code>MutationObserver</code></pre></a> 作为暗示的评论,另请参阅<a href="https://stackoverflow.com/a/59518023/1214236">此答案</a>了解重复的问题。</p> <pre><code>new MutationObserver(async (mutations, observer) => { let oldScript = mutations .flatMap(e => [...e.addedNodes]) .filter(e => e.tagName == 'SCRIPT') .find(e => e.src.match(/old-script.js/)) if (oldScript) { observer.disconnect() oldScript.remove() let text = await fetch(oldScript.src).then(e => e.text()) .then(e => e.replace(/hijack-part/g, "profit")) let newScript = document.createElement('script') newScript.type = 'module' // or text/javascript depending on what you hijack newScript.textContent = text document.querySelector('head').appendChild(newScript) } }).observe(document, { childList: true, subtree: true, }) </code></pre> <p>不过,我并不能 100% 确定突变和脚本加载/执行方面的事情发生的顺序。所以我不知道是否存在在观察者发生突变之前脚本已经执行的极端情况。 AFAICT <pre><code>MutationObserver</code></pre> 只是一个观察者,并不能严格阻止节点被添加,只需立即删除它们即可。</p> <p>就我而言,它确实有效。</p> </answer> </body></html>
我的公司有一个状态屏幕,我们可以通过 PLEX 访问该屏幕,以直观地了解整个工厂车间的机器状态。我们通过...
我正在学习如何使用 Greasemonkey,并且想知道 @namespace 元数据 id 的用途。 它必须是网址吗?或者它可以是我计算机上的文件夹/目录吗? 难道还...
我编写了一个小用户脚本,它最初仅适用于一个网页,现在我添加了更多功能,我尝试让脚本在多个站点上工作,据我所知,我必须从
我有一个网站,其中包含以下内容: 我有一个网站,其中包含以下内容: <div class="yqCWmB"> <img referrerpolicy="unsafe-url" src="//www.golem.de/1903/sp_Vllz-744275_rc.jpg" style="position: fixed; top: 87px;"> </div> 类名中的“yqCWmB”是动态创建的。 当我使用: GM_addStyle(".'yqCWmB' {visibility: hidden !important; }"); 该元素被隐藏,但下次该类名称类似于“zCNfYMo”并且该元素不再隐藏。 如何搜索该动态类名?我在 Greasemonkey 脚本中使用它。 DIV 中的 <img referrerpolicy="unsafe-url" 始终相同,也许可以找到某种方法? 非常感谢! 您可以使用 referrerpolicy 属性及其值来隐藏 div。 工作片段: $('img[referrerpolicy="unsafe-url"]').closest('div').hide(); <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="yqCWmB"> <img referrerpolicy="unsafe-url" src="//www.golem.de/1903/sp_Vllz-744275_rc.jpg" style="position: fixed; top: 87px;"> <p>Hey</p> </div> 输出:
我有以下脚本来自动跟随Google图像搜索结果中的IFRAME: // ==用户脚本== // @name 在 Google 图片搜索中关注 IFRAME // @命名空间 http://
我正在使用油脂猴用户脚本来重新设计 UI 并在一些奇怪的网站上自动执行初始输入,该网站使用 jQuery 和 Select2。 我处理包含两个选择的行: 组织(选项有
如何在 Google Chrome 的 Greasemonkey 脚本中使用 jQuery?
你们中的一些人可能知道,Google Chrome 对 Greasemonkey 脚本设置了一些严格的限制。 Chromium 不支持 @require、@resource、unsafeWindow、GM_registerMenuCommand、GM_setValue 或
我正在为一个论坛编写一个 Greasemonkey 脚本,如果您在所写的帖子上点击“提交”,您将被带到一个通知页面,显示“您的帖子已发布”。 我正在努力获得...
我正在编写一个 Greasemonkey 脚本,将一些文本转换为 Rally 页面上的链接。仅当我重新加载页面时,该脚本才能正常工作。如果我以任何方式导航到该页面(链接、浏览器...