greasemonkey - 在 Greasemonkey 脚本中,如何通过元素定位页面?

标签 greasemonkey userscripts tampermonkey

我想使用 Greasemonkey 脚本更改页面,但该页面是 CGI POST 调用的结果,因此 URL 如下所示:

http://www.example.com/cgi-bin/foo.pl

很明显,我不能在 Greasemonkey 脚本中使用 @include,因为该 URL 适合应用程序可以生成的许多页面。

在执行操作之前,我可以在脚本中查找页面上的一些元素:

if (document.getElementById('someIdentifier')) {
  // do changes in here
}

但我想知道是否有更好的、也许是内置的方法来做到这一点。

最佳答案

Greasemonkey(以及大多数用户脚本引擎)没有内置方法来通过元素定位页面。您的脚本需要轮询或使用类似 Mutation Observers 的机制检查所需的元素。

执行此操作的一个简便方法是使用 the waitForKeyElements() utility ,并且您仍然希望使用 @include@exclude 和/或 @match 指令来缩小页面触发范围有可能。

这是一个完整的 Greasemonkey/Tampermonkey 脚本,说明了该过程:

// ==UserScript==
// @name     _Do something after select posts
// @include  http://www.example.com/cgi-bin/foo.pl*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant    GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
    introduced in GM 1.0.   It restores the sandbox.
*/

function processTargetElement (jNode) {
    //***** YOUR CODE HERE *****
    jNode.css ("background", "pink");   
}

waitForKeyElements ("#someIdentifier", processTargetElement);

关于greasemonkey - 在 Greasemonkey 脚本中,如何通过元素定位页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21639516/

相关文章:

Javascript 的 object.onClick 运行函数而不是设置 onClick,如何防止这种情况发生并只执行函数 onClick?

javascript - 在页面加载时运行 TamperMonkey 脚本

javascript - 使用 javascript/jQuery 测试数组的函数

javascript - 更改 keyup 上的输入字段以匹配 MAC 地址格式

javascript - 尝试将 jquery 加载到 tampermonkey 脚本中

google-chrome-extension - 为什么 Tampermonkey 的 GM_xmlhttpRequest 可以执行 CORS 请求?

javascript - 如何使用 greasemonkey 和 javascript 将页面上每个字母的颜色更改为随机选择的颜色?

javascript - 如何在JS中向网页发送控制台命令?

javascript - Greasemonkey 脚本来监控网站更改

javascript - 将变量传递到新页面