我正在尝试创建动态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();
嗯,它没有。任何人都有任何想法如何去做?
答案 0 :(得分:2)
您无法使用Greasemonkey(单独)动态创建Greasemonkey脚本。
GM脚本不是HTML页面的一部分,因此将GM代码写入页面将永远不会起作用。该脚本需要安装到GM的脚本管理系统中。
GM脚本无法写入文件系统,也无法访问足够的浏览器chrome来安装脚本加载项。
您可能能够编写将脚本发布到服务器的GM脚本,然后将浏览器发送到该服务器。然后,GM会提示用户安装新脚本。
您可能能够编写可编写GM脚本的浏览器插件,但我怀疑这种方法很难。
您可能会编写一个Python(或C,VB等)程序来生成用于安装的GM脚本。通过额外的工作,这样的程序也可以自动安装脚本。
为什么要动态创建Greasemonkey脚本呢?可能有一种更简单的方法来实现真正的目标。?
回复:"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"
...
一种方法:
使用GM_setValue()存储域和选择器对。
首先,脚本会检查是否有为当前页面的域或URL存储的值(使用GM_getValue() or GM_listValues())。
如果找到匹配项,请隐藏选择器中指定的元素。
请注意,根据元素的不同,优秀的Adblock Plus extension可以更优雅地阻止元素(也可以节省带宽/ DL时间)。