有没有一种简单的方法可以做到这一点。由于运行方式的不同,有什么需要改变的吗?
2 回答
最简单的方法是:
通过URL 解码器运行小书签代码。因此
javascript:alert%20('Hi%20Boss!')%3B
,例如,变为:
javascript:alert ('Hi Boss!');
剥去前导
javascript:
。结果:alert ('Hi Boss!');
将此代码添加到 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!');
使用 Firefox ( )打开Hello World.user.jsCtrlO。Greasemonkey 将提示安装脚本。
@include
现在,书签代码将在您使用and@exclude
指令指定的任何页面上自动运行。更新: 为确保最大的兼容性,请使用在
@grant none
Greasemonkey 和 Tampermonkey 的更高版本中添加的指令。
重要的:
用户脚本将比您激活书签快得多。通常,这不是问题。
但在某些情况下,您可能需要等待页面的某些部分完全加载。
在这种情况下,您可以使用诸如waitForKeyElements 之类的技术/实用程序。如果您仍然无法让您的新脚本运行,请务必阅读我的非常简单的 Greasemonkey 脚本没有运行?. 按照步骤并在您打开的有关新脚本问题的任何问题中包含指定信息。
这是一篇非常好的文章,可以避免由于“普通” 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()
。