标签: greasemonkey

你如何组织Javascript verboseness?

我正在编写一个GM脚本,有一件事我意识到我反复做的是一遍又一遍地做同样的代码.具体来说,是样式属性.

function createButton() {
    var a = document.createElement('a');
    a.href = '#';
    a.innerHTML = 'Print Topic';
    a.style.position = 'absolute';
    a.style.right = '3em';
    a.style.top = '6em';
    a.style.fontFamily = 'Arial,Helvetica,sans-serif';
    a.style.fontWeight = 'bold';
    a.style.fontSize = '125%';
    a.style.background = '#777777 none repeat scroll 0 0';
    a.style.color = 'white';
    a.style.padding = '6px 12px';
    document.body.insertBefore(a, document.body.lastChild);
}
Run Code Online (Sandbox Code Playgroud)

正如你在我的示例代码中看到的那样,我反复写了很多次.你有技术可以避免这种混乱吗?只是为了优雅.

谢谢 -

伙计们,这是减少的代码:

function createButton() {
    var a = document.createElement('a');
    var css = document.createElement('style');
    css.type = 'text/css';
    css.innerHTML = '#prt { position:absolute; right:3em; top: 6em; font-family: Arial,Helvetica,sans-serif; font-weight:bold; …
Run Code Online (Sandbox Code Playgroud)

javascript greasemonkey

1
推荐指数
1
解决办法
241
查看次数

如何"静静地"从Greasemonkey脚本重新加载页面?

我想重新加载页面,以便它不会导致整页刷新的效果,例如在页面选项卡上显示"正在加载...".

这是我到目前为止的代码.我的理论是,我可以body使用<frame>已更新网站的包装版本覆盖该部分,获得通过GM_xmlhttpRequest.

reloader.js

setInterval(reload, 10000);

function reload() {
    GM_xmlhttpRequest({method: 'GET',
            url: location.href,
            onload: function(responseDetails) {
                document.body.innerHTML =
                                '<frame>\n'
                                + responseDetails.responseText
                                + '</frame>\n';
            }});
}
Run Code Online (Sandbox Code Playgroud)

在stackoverflow.com上使用Firebug进行测试时,我发现此脚本更新了body ,就像我执行了整页刷新一样,没有副作用.好极了!神秘的是,这些<frame>标签无处可寻.

问题

我现在所做的就是重新加载页面,但我有两个问题:

  1. 重新加载后如何保持登录状态?具体来说,我需要做些什么才能让我登录Stack Overflow?
  2. 有人能解释为什么我的脚本有效吗?为什么里面没有<frame>标签body

更新

到目前为止,我已经收集了Cleiton,Havenard和Henrik的答案中的元素.我尝试通过发送header: { 'Cookie': document.cookie }的数据中的条目发送cookie GM_xmlhttpRequest.这发送了一些但不是所有的cookie.事实证明,如果我打开的Firefox的第三方Cookie,然后我会得到必要的额外的饼干(.ASPXAUTH,ASP.NET_SessionId,和user),但是这是一个坏主意.

html javascript ajax greasemonkey

1
推荐指数
1
解决办法
2936
查看次数

使用greasemonkey加载和解析远程url

我如何编写一个 Greasemonkey 脚本来遍历 URL 列表(在同一域中)并启用对生成的 DOM 执行 XPath 查询?

谢谢

javascript url greasemonkey

1
推荐指数
1
解决办法
4409
查看次数

Firefox 中的 WebSQL

我今天正在查看一个greasemonkey脚本,试图弄清楚为什么它不再起作用了。玩了一段时间后,我意识到它在 firefox 3.6 上运行良好,但在当前版本 (8) 等更高版本上却运行良好。

经过一番谷歌搜索后,我来到了这里

我不确定我是否正确阅读了这篇文章。WebSQL 完全从 Firefox 中删除是因为标准化过程已陷入“僵局”,因为除了 SQLite 之外没有其他实现?这是否意味着依赖WebSQL的greasemonkey脚本需要ff 3.6才能正常运行?

我想知道简单地将 SQLite 分叉到 NotSQLite 并让标准化过程继续下去会有多困难......

sqlite firefox greasemonkey web-sql

1
推荐指数
1
解决办法
6698
查看次数

我的 Greasemonkey 脚本没有在页面上找到元素(链接)?

网址是:lexin.nada.kth.se/lexin/#searchinfo=both,swe_gre,hej;

我的脚本是:

function main(){
  var links=document.getElementsByTagName("a");
  alert("There are " + links.length + "links.");
}

main();
Run Code Online (Sandbox Code Playgroud)

运行脚本会给我两条警告消息说

有 0 个链接。

有什么想法为什么我无法从文档中获得正确数量的链接?为什么我会收到两次警报?

javascript dom greasemonkey getelementsbytagname tampermonkey

1
推荐指数
1
解决办法
3004
查看次数

在jQuery中使用$(document).ready的Greasemonkey问题

当我访问www.reuters.com时,我无法弄清楚为什么这至少不会提醒我一次.我错过了什么吗?

// ==UserScript==
// @name        test3
// @namespace   test3
// @version     1
// ==/UserScript==

$(document).ready(function () {

    var actualHost = window.location.toString();
    var intendedHost = "www.reuters.com";

    alert("Debug 1 - " + actualHost);

    if (actualHost == intendedHost) {
        alert("Debug 2 - " + actualHost);
    }

});
Run Code Online (Sandbox Code Playgroud)

谢谢.

jquery greasemonkey loading document-ready

1
推荐指数
1
解决办法
5089
查看次数

通过按键触发警报

我正在写一个 Greasemonkey 脚本。我想在用户按下“Q”键时触发某个代码运行。我做了一些研究,我看到的大多数来源都建议使用window.onkeypress.

为了测试此方法,我创建了一个用户脚本,设置为在用户按下 时运行Q。这是我的代码:

window.onkeypress = function(event) {
   if (event.keyCode == 81) {
   alert("This is a test.")
   }
}
Run Code Online (Sandbox Code Playgroud)


然而,按下 Q 键后,什么也没发生。我想知道是否有人知道这可能是为什么以及我可以做些什么来纠正它。

此外,如果有人知道我可以用来达到相同效果的任何其他方法,将不胜感激。

javascript greasemonkey keypress userscripts tampermonkey

1
推荐指数
1
解决办法
5849
查看次数

Firefox 附加组件的性能是否明显优于 Greasemonkey 脚本?

我写了一个 Greasemonkey 脚本,它在所有站点上运行,检查一些事情。
因为它在每个页面上运行,所以性能很重要。因此,我想知道 Firefox 插件是否会更快。

所以这些是我的问题:

  • Greasemonkey 是否需要在每个页面(重新)加载时重新加载脚本?
  • 附加组件可以提高性能吗?
  • 有什么优点、缺点?

更新:
一些背景信息 - 我正在对我的脚本进行页面加载延迟评估。

更新 2(更多信息):
我的脚本的头部如下所示:

// ==UserScript==
// @name        My Script
// @namespace   abc
// @description What it does
// @include     *
// @resource    moz_list  http://mxr.mozilla.org/mozilla/source/netwerk/dns/src/effective_tld_names.dat?raw=1
// @resource    resource_B http://mysite.org/res
// @version     1.0
// @grant       GM_xmlhttpRequest
// @grant       GM_getValue
// @grant       GM_setValue
// @grant       GM_getResourceText  
// ==/UserScript==  
Run Code Online (Sandbox Code Playgroud)

此外,我使用这些技术:

  • 字典和数组数据类型
  • 用于匹配链接的 RegExp
  • 来自这里的 tldextract 代码:https : //github.com/masylum/tldextract
  • 用于在缓存中存储和检索字典的 JSON(字符串化和 eval 可以更快吗?)
  • document.getElementsByTagName()
  • 窗口.位置.主机名

在伪代码中,我的主要功能是这样的:

var host = …
Run Code Online (Sandbox Code Playgroud)

performance firefox greasemonkey firefox-addon

1
推荐指数
1
解决办法
1016
查看次数

如何使用 Greasemonkey 隐藏 XPath 元素?

我有一个 XPath /html/body/div[1]/div/div/center[1]/table,我想让它不再可见。

我看到我可以使用,document.evaluate()但我不知道如何隐藏它。

javascript xpath greasemonkey tampermonkey

1
推荐指数
1
解决办法
2785
查看次数

如何基于内部SPAN内的文本删除整个DIV

您能否提供建议-如何使用Tampermonkey删除/隐藏整个div块?如下所示的代码:如果整个div“相对ember-view”中包含在父div“相对ember-view”内部深处包含文本ADSWG的跨度,如何删除?因此,在网页上有很多“相对ember-view” -div,但是我试图仅删除这些,在span标签中包含ADSWG。

希望,我已经解释清楚了。先感谢您。

<div id="ember175" class="relative ember-view"> 
    <div id="ember177" class="occludable-update ember-view">
        <div .....
        <span class="...
            <div id="ember270" class="
                <span id="ember273" class="ember-view">
                        <span>ADSWG</span>
Run Code Online (Sandbox Code Playgroud)

jquery greasemonkey userscripts tampermonkey

1
推荐指数
1
解决办法
55
查看次数