[英]Is there a way to automatically convert a Greasemonkey script into a bookmarklet?
[英]How to convert a bookmarklet into a Greasemonkey userscript?
有一个简单的方法可以做到这一点。 由于运行方式的差异,是否需要更改任何内容?
最简单的方法是:
通过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( Ctrl O )打开Hello World.user.js 。 Greasemonkey将提示您安装脚本。
现在,bookmarklet代码将自动在您使用@include
和@exclude
指令指定的任何页面上运行。
更新:为了确保最大的兼容性,请使用在更高版本的Greasemonkey和Tampermonkey中添加的@grant none
指令。
重要:
该用户脚本的运行时间比您激活书签要快得多。 通常,这不是问题。
但是在某些情况下,您可能需要等待页面的某些部分完全加载 。
在那种情况下,您可以使用诸如waitForKeyElements之类的技术/实用程序 。
另请参见在AJAX驱动的网站上选择和激活正确的控件 。
如果仍然无法使新脚本正常工作,请确保阅读我的非常简单的Greasemonkey脚本未运行? 。 请执行以下步骤,并在打开的有关新脚本问题的任何问题中包括指定的信息 。
这是一篇很好的文章, 可以避免由于“普通” 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.