问题标签 [greasemonkey-4]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
702 浏览

javascript - 每次加载适当的页面时,如何使脚本仅重定向一次?

我正在编写一个 Tampermonkey 脚本,我想用它来重定向youtube.com/*到 YouTube 频道地址。

当脚本运行时,它会重定向到频道 URL,但随后会继续运行并不断重定向

0 投票
0 回答
25 浏览

javascript - 当 DOM 改变时运行一个函数?

创建元素时是否会触发 DOM 事件?

我正在使用下面的脚本来扫描并删除动态创建的 HTML div。

我更喜欢挂钩到 DOM 事件模型而不是轮询。

0 投票
2 回答
959 浏览

javascript - 编写用户脚本时是否真的需要立即调用函数表达式 (IIFE) 模式?

我的问题非常类似于What is the purpose of a self execution function in javascript? ,但是它涉及用户脚本(特别是对于 GreaseMonkey)。

我看到有些用户脚本是按照这种模式分发的,有些则不是。

IIFE 模式的脚本示例:(来源)

没有它的脚本示例:(来源)

此外,我还发现 TamperMonkey 的“新脚本”模板跟随着它,而 GreaseMonkey 和 ViolentMonkey 的模板没有。

那么问题是,IIFE 模式在编写用户脚本时有用吗?

特别是,如果我的脚本处于strictmode,并且我使用let而不是var. 无论如何,据我所知,用户脚本中定义的函数和变量在全局页面范围内不可用。

谢谢。

0 投票
0 回答
513 浏览

javascript - 为什么'window.location.href' 在这个用户脚本中返回“about:blank”?

这个非常简单的用户脚本让我受益匪浅:

使用 Facebook 主页加载新选项卡时,它会正确打印当前 URL。但是,如果我已经在现有的 Facebook 页面上,然后单击左上角的 Facebook 徽标转到主页,它会在短时间内错误地打印 pseudo-URL about:blank

为什么会发生,更重要的是,如何解决?

这是在 Firefox 67 和 GreaseMonkey 4.9 上。
(查看编辑历史以获得更长的演示。)

更新:

  1. alert(document.URL)还打印“关于:空白”。

  2. document.addEventListener("DOMContentLoaded", function(){alert(window.location.href)})什么都不打印。

  3. window.addEventListener("load", function(){alert(window.location.href)})打印一个与地址栏中的不匹配的很长的 URL;它在表格上:

  4. document.baseURI作品! (为什么?) -但这不是一个理想的解决方案,因为在宏伟的计划中,我实际上想访问window.location对象的其他属性(path并且search,准确地说)。我可以new URL()用这个来构建 a,但老实说,如果可能的话,我宁愿避免这样做(也希望在整个脚本中保持一致)。 更新:也只适用于瞬间。

0 投票
0 回答
320 浏览

javascript - Greasemonkey 脚本在弹出窗口中不起作用

我编写了一个简单的greasemonkey 脚本,当我按下右箭头键时,可以在弹出的模块演示窗口中单击下一步按钮。

我无法在网上找到很多关于此的信息。如果窗口不是弹出窗口,代码似乎可以工作,否则它只会在函数外部打印 console.log 并且永远不会到达函数 myEventHandler 的内部。我认为问题似乎出在 window.addEventListener 或者事件根本没有被触发。

任何帮助将不胜感激。我很乐意提供更多需要的信息。

0 投票
1 回答
713 浏览

tampermonkey - 如何获取网页中包含的文本并将其作为页面标题的一部分?

我迫切需要帮助编写 Tampermonkey/Greasemonkey 脚本,该脚本获取网页中的部分信息并使其成为页面(和窗口)标题的一部分。

客户名称是目标(内部)网页的一部分,并在 HTML 中明确标记:

我想将文本“Johnnyfirst Smithylast”添加到窗口标题并尝试:

但这导致标题如下: ... | Name: null

第二个问题是我搭载此用户脚本的网站不会一次全部加载。在初始页面加载之后,有大量的 javascript 功能会加载页面的各个部分并最终显示如上所示的客户端名称。

当我尝试$(window).on('load', function() { ... }) or $(document).ready()时,它似乎正在对尚未完全加载信息的网页的初步版本进行操作。

0 投票
0 回答
298 浏览

javascript - 当加载某个 AJAX 元素 CONTAINING SPECIFIC TEXT 时,如何使用 waitForKeyElements 触发函数?

我希望能够在加载某个 AJAX 元素时触发一个函数。我正在使用 Brock Adam 出色的 waitForKeyElements 函数来等待某个 HTML 元素,该元素可能会在主页加载后很长时间通过 AJAX 出现。通常我可以使用类似的东西

当具有类 section-title 的元素时触发 MyFunction。不幸的是,在这种情况下,有多个具有类 section-title 的元素;我正在寻找的包含文本“Notes”,如下所示:

它可能会出现,也可能根本不会出现。如果出现其他内容,我不想触发,如下所示:

有什么方法可以让 waitForKeyElements 仅在特定文本出现在该类元素中时触发?如果 waitForKeyElements 已经由上面第二个示例中的 Other Section Title 触发,它将不再由上面第一个示例中的正确 Notes 部分的稍后出现触发。我尝试将 bWaitOnce 参数设置为 false,但 waitForKeyElements 仍然不会因为重复出现满足“.section-title”标准的元素而触发。因此,仅使用 MyFunction 来搜索 Notes 文本是徒劳的。

任何帮助,将不胜感激!

0 投票
1 回答
420 浏览

metadata - 如何定义多行@description 元数据?

以下均无效:

text2显示。

text1显示。

text1显示。

显示文字 <br />。

显示文字 \n。

0 投票
1 回答
28 浏览

jquery - What happens to 'this' between two calls of .each()?

The following code in a GM script in FF 68.0.1:

prints first:

as expected but then:

Even if the internal iterator is consumed at the first call and not initialised at the second (though .each() doesn't mention such a behaviour) it shouldn't print the Sandbox object but simply not call debugn(...), shouldn't it?

0 投票
1 回答
653 浏览

javascript - GM.xmlHttpRequest `同步`选项不起作用

以下代码使用内容创建警报undefined

根据文档,我希望synchronous可以选择使调用返回响应object。然而,它的行为方式与异步调用相同;处理onload程序仍然有效。该synchronous选项是否被禁用?还有其他方法可以同步发出跨域请求吗?