动态创建greasemonkey脚本

时间:2011-01-30 23:17:12

标签: javascript dynamic greasemonkey window.open

我正在尝试创建动态GM脚本。这是我认为会做的事情

win = window.open('myScript.user.js');
win.document.writeln('// ==UserScript==');
win.document.writeln('// @name          sample script');
win.document.writeln('// @description   alerts hi');
win.document.writeln('// @include       http://www.google.com/*');
win.document.writeln('// ==/UserScript==');
win.document.writeln('');
win.document.writeln('(function(){alert("hi");})()');
win.document.close();

嗯,它没有。任何人都有任何想法如何去做?

1 个答案:

答案 0 :(得分:2)

您无法使用Greasemonkey(单独)动态创建Greasemonkey脚本。

GM脚本不是HTML页面的一部分,因此将GM代码写入页面将永远不会起作用。该脚本需要安装到GM的脚本管理系统中。

GM脚本无法写入文件系统,也无法访问足够的浏览器chrome来安装脚本加载项。

  • 可能能够编写将脚本发布到服务器的GM脚本,然后将浏览器发送到该服务器。然后,GM会提示用户安装新脚本。

  • 可能能够编写可编写GM脚本的浏览器插件,但我怀疑这种方法很难。

  • 您可能会编写一个Python(或C,VB等)程序来生成用于安装的GM脚本。通过额外的工作,这样的程序也可以自动安装脚本。


为什么要动态创建Greasemonkey脚本呢?可能有一种更简单的方法来实现真正的目标。?



OP评论/澄清的更新:

回复:"I want to be able to have a user select an element to get blocked and then create a script that sets that element's display to none on all sites from that domain" ...

一种方法:

  1. 使用GM_setValue()存储域和选择器对。

  2. 首先,脚本会检查是否有为当前页面的域或URL存储的值(使用GM_getValue() or GM_listValues())。

  3. 如果找到匹配项,请隐藏选择器中指定的元素。


  4. 请注意,根据元素的不同,优秀的Adblock Plus extension可以更优雅地阻止元素(也可以节省带宽/ DL时间)。