问题标签 [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.
javascript - 每次加载适当的页面时,如何使脚本仅重定向一次?
我正在编写一个 Tampermonkey 脚本,我想用它来重定向youtube.com/*
到 YouTube 频道地址。
当脚本运行时,它会重定向到频道 URL,但随后会继续运行并不断重定向。
javascript - 当 DOM 改变时运行一个函数?
创建元素时是否会触发 DOM 事件?
我正在使用下面的脚本来扫描并删除动态创建的 HTML div。
我更喜欢挂钩到 DOM 事件模型而不是轮询。
javascript - 编写用户脚本时是否真的需要立即调用函数表达式 (IIFE) 模式?
我的问题非常类似于What is the purpose of a self execution function in javascript? ,但是它涉及用户脚本(特别是对于 GreaseMonkey)。
我看到有些用户脚本是按照这种模式分发的,有些则不是。
IIFE 模式的脚本示例:(来源)
没有它的脚本示例:(来源)
此外,我还发现 TamperMonkey 的“新脚本”模板跟随着它,而 GreaseMonkey 和 ViolentMonkey 的模板没有。
那么问题是,IIFE 模式在编写用户脚本时有用吗?
特别是,如果我的脚本处于strict
mode,并且我使用let
而不是var
. 无论如何,据我所知,用户脚本中定义的函数和变量在全局页面范围内不可用。
谢谢。
javascript - 为什么'window.location.href' 在这个用户脚本中返回“about:blank”?
这个非常简单的用户脚本让我受益匪浅:
使用 Facebook 主页加载新选项卡时,它会正确打印当前 URL。但是,如果我已经在现有的 Facebook 页面上,然后单击左上角的 Facebook 徽标转到主页,它会在短时间内错误地打印 pseudo-URL about:blank
。
为什么会发生,更重要的是,如何解决?
这是在 Firefox 67 和 GreaseMonkey 4.9 上。
(查看编辑历史以获得更长的演示。)
更新:
alert(document.URL)
还打印“关于:空白”。document.addEventListener("DOMContentLoaded", function(){alert(window.location.href)})
什么都不打印。window.addEventListener("load", function(){alert(window.location.href)})
打印一个与地址栏中的不匹配的很长的 URL;它在表格上:document.baseURI
作品! (为什么?) -但这不是一个理想的解决方案,因为在宏伟的计划中,我实际上想访问更新:也只适用于瞬间。window.location
对象的其他属性(path
并且search
,准确地说)。我可以new URL()
用这个来构建 a,但老实说,如果可能的话,我宁愿避免这样做(也希望在整个脚本中保持一致)。
javascript - Greasemonkey 脚本在弹出窗口中不起作用
我编写了一个简单的greasemonkey 脚本,当我按下右箭头键时,可以在弹出的模块演示窗口中单击下一步按钮。
我无法在网上找到很多关于此的信息。如果窗口不是弹出窗口,代码似乎可以工作,否则它只会在函数外部打印 console.log 并且永远不会到达函数 myEventHandler 的内部。我认为问题似乎出在 window.addEventListener 或者事件根本没有被触发。
任何帮助将不胜感激。我很乐意提供更多需要的信息。
tampermonkey - 如何获取网页中包含的文本并将其作为页面标题的一部分?
我迫切需要帮助编写 Tampermonkey/Greasemonkey 脚本,该脚本获取网页中的部分信息并使其成为页面(和窗口)标题的一部分。
客户名称是目标(内部)网页的一部分,并在 HTML 中明确标记:
我想将文本“Johnnyfirst Smithylast”添加到窗口标题并尝试:
但这导致标题如下: ... | Name: null
。
第二个问题是我搭载此用户脚本的网站不会一次全部加载。在初始页面加载之后,有大量的 javascript 功能会加载页面的各个部分并最终显示如上所示的客户端名称。
当我尝试$(window).on('load', function() { ... })
or $(document).ready()
时,它似乎正在对尚未完全加载信息的网页的初步版本进行操作。
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 文本是徒劳的。
任何帮助,将不胜感激!
metadata - 如何定义多行@description 元数据?
以下均无效:
仅text2
显示。
仅text1
显示。
仅text1
显示。
显示文字 <br />。
显示文字 \n。
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?
javascript - GM.xmlHttpRequest `同步`选项不起作用
以下代码使用内容创建警报undefined
:
根据文档,我希望synchronous
可以选择使调用返回响应object
。然而,它的行为方式与异步调用相同;处理onload
程序仍然有效。该synchronous
选项是否被禁用?还有其他方法可以同步发出跨域请求吗?