6

有没有一种简单的方法可以做到这一点。由于运行方式的不同,有什么需要改变的吗?

4

2 回答 2

5

最简单的方法是:

  1. 通过URL 解码器运行小书签代码。因此javascript:alert%20('Hi%20Boss!')%3B,例如,变为:
    javascript:alert ('Hi Boss!');

  2. 剥去前导javascript:。结果:alert ('Hi Boss!');

  3. 将此代码添加到 Greasemonkey 文件的末尾。例如,使用以下代码创建一个名为
    Hello World.user.js的文件:

    // ==UserScript==
    // @name            Hello World!
    // @description     My first GM script from a bookmarklet
    // @include         https://stackoverflow.com/questions/*
    // @grant           none
    // ==/UserScript==
    
    alert ('Hi Boss!');
    
  4. 使用 Firefox ( )打开Hello World.user.jsCtrlO。Greasemonkey 将提示安装脚本。

  5. @include现在,书签代码将在您使用and@exclude指令指定的任何页面上自动运行。

  6. 更新: 为确保最大的兼容性,请使用在@grant noneGreasemonkey 和 Tampermonkey 的更高版本中添加的指令。


重要的:

于 2011-08-02T01:20:46.207 回答
1

这是一篇非常好的文章,可以避免由于“普通” JS 和 Greasemonkey 之间的差异而导致的常见陷阱。

一开始最重要的事情:

  • 不要将函数用作字符串,例如:window.setTimeout("my_func()", 1000);而是 window.setTimeout(my_func, 1000);window.setTimeout(function(){doSomething(); doSomethingOther();}, 1000);

  • 不要设置element.onclick而是element.addEventListener("click", my_func, true);

  • 一些通常返回各种 DOM 对象的代码,在 Greasemonkey 环境中返回那些包装在 XPCNativeWrapper 中的对象。这是出于安全原因。

    有些方法和属性是“透明的”,您可以在包装对象上调用它们,但有些则不然。阅读上述文章,了解如何规避这一点;您也可以使用(通常不建议这样做,但用于测试等)wrappedJSObject 属性。它是,当obj.something/obj.something() 在 Greasemonkey 中不起作用时,尝试obj.wrappedJSObject.something/ obj.wrappedJSObject.something()

于 2011-09-14T00:34:15.873 回答