有一种简单的方法可以做到这一点。还有什么需要改变的,因为它的运行方式不同?
答案 0 :(得分:5)
最简单的方法:
通过URL decoder运行bookmarklet代码。例如,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.js ( Ctrl O )。 Greasemonkey将提示安装脚本。
现在,bookmarklet代码将自动在您使用@include
和@exclude
指令指定的任何页面上运行。
更新:为确保最大兼容性,请使用Greasemonkey和Tampermonkey的更高版本中添加的@grant none
指令。
重要:
用户脚本的运行速度比激活书签要快得多。通常情况下,这不是问题。
但在某些情况下,您可能需要等待页面的某些部分完全加载。
在这种情况下,您可以use techniques/utilities like waitForKeyElements。
另请参阅Choosing and activating the right controls on an AJAX-driven site。
如果您仍无法使用新脚本,请务必阅读My very simple Greasemonkey script is not running?。在您打开的有关新脚本问题的任何问题中,请按照步骤包含指定信息。
答案 1 :(得分:1)
由于“普通”JS和Greasemonkey之间的差异,这是avoid common pitfalls的一篇非常好的文章。
一开始最重要的事情:
window.setTimeout("my_func()", 1000);
window.setTimeout(my_func, 1000);
或
window.setTimeout(function(){doSomething(); doSomethingOther();}, 1000);
element.onclick
element.addEventListener("click", my_func, true);
在Greasemonkey环境中,一些通常返回各种DOM对象的代码会返回包含在XPCNativeWrapper中的对象。这是出于安全原因。
某些方法和属性是“透明的”,您可以在包装对象上调用它们,但有些则不能。请阅读上述文章,了解如何规避这一点;你也可以使用(这不是一般的建议,但是用于测试等)wrappedJSObject属性。当obj.something
/ obj.something()
在Greasemonkey中不起作用时,请尝试obj.wrappedJSObject.something
/ obj.wrappedJSObject.something()
。