繁体   English   中英

如何将小书签转换为Greasemonkey用户脚本?

[英]How to convert a bookmarklet into a Greasemonkey userscript?

有一个简单的方法可以做到这一点。 由于运行方式的差异,是否需要更改任何内容?

最简单的方法是:

  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( Ctrl O )打开Hello World.user.js Greasemonkey将提示您安装脚本。

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

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


重要:

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

一开始最重要的事情:

  • 不要将函数用作字符串,例如: window.setTimeout("my_func()", 1000); 而是window.setTimeout(my_func, 1000); window.setTimeout(function(){doSomething(); doSomethingOther();}, 1000);
  • 不设置element.onclick而是设置element.onclick element.addEventListener("click", my_func, true);
  • 一些通常返回各种DOM对象的代码,在Greasemonkey环境中,返回包装在XPCNativeWrapper中的那些对象。 这是出于安全原因。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM