回答

5

要做到这一点最简单的方法:

  1. 通过URL decoder运行书签代码。使得javascript:alert%20('Hi%20Boss!')%3B,例如,成为:
    javascript:alert ('Hi Boss!');

  2. 地带的领先javascript:关闭。结果:alert ('Hi Boss!');

  3. 将此代码添加到您的Greasemonkey文件的末尾。例如,创建一个名为文件,
    你好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. 打开你好World.user.js与Firefox(按CtrlO)。 Greasemonkey将提示安装脚本。

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

  6. 更新:为了保证最大的兼容性,使用由Greasemonkey和Tampermonkey的更高版本增加了@grant none指令。


重要:

+0

这很好,但是这会在每一页上自动运行。我所有的书签都是我只想激活的东西(比如在插件板上书签或者在Wayback Machine上查找)。你会如何让它只在我想要的时候执行? –

+0

@NickS,这就是[@ include','@ exclude'和'@ match'指令](https://tampermonkey.net/documentation.php#_include)的用途。 –

+0

对不起,让我澄清一下:我的意思是我想在一个页面上,想“嘿,我想在Wayback Machine上查看这个”,点击* something *,然后执行我的脚本(用Wayback打开一个新标签机器搜索当前的网址)。 我点击了什么?脚本如何知道何时打开选项卡? –

1

这里是一个很好的文章,以avoid common pitfalls因为“正常”的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()

相关问题