标签: greasemonkey

使用Greasemonkey或userscript将远程JavaScript文件替换为本地调试副本

在调试使用Google后端的客户端应用程序时,我添加了一些调试版本的函数,并使用Chrome Developer Tools脚本编辑器插入它们.

但是这种方法存在许多限制,首先是编辑器似乎并不总是使用去缩小文件,而当JS文件长度为35K行时,这是一个问题.

另一个问题是在加载时间内完成的所有初始化都使用原始的"未修补"函数,因此这并不理想.

我想javascript.js用我自己的本地副本替换远程文件,大概是使用文件名上的一些正则表达式,或者任何合适的策略,我很乐意使用Firefox或Chrome,如果一个比另一个更容易.

javascript firebug greasemonkey google-chrome

34
推荐指数
2
解决办法
1万
查看次数

UserScripts&Greasemonkey:调用网站的JavaScript函数

我正在为Firefox和Chrome创建一个UserScript扩展,我正在尝试使用网站JavaScript中的一些代码,例如:

function: myFunction(){
    return  Grooveshark.playNextSong();
}
Run Code Online (Sandbox Code Playgroud)

问题是当我测试这段代码时, Grooveshark是一个空引用.

我知道还有其他人做过:

见BetterGrooveshark

但我不知道为什么我的简单扩展无法调用Grooveshark的JavaScript函数.

我是否需要将我的脚本"附加"到文档中才能使其正常工作?: document.document.body.appendChild(script);

不是Greasemonkey已经注入我的扩展JavaScript吗?请允许有人为我澄清这一点.

谢谢.

javascript greasemonkey userscripts google-chrome-extension

33
推荐指数
2
解决办法
2万
查看次数

关于AJAX请求的Fire Greasemonkey脚本

我正在处理用户脚本,我刚刚发现当主页面发出AJAX请求时脚本没有运行.

有没有办法在主页加载和AJAX请求上触发用户脚本?

javascript ajax firefox greasemonkey

33
推荐指数
1
解决办法
2万
查看次数

如何使用用户脚本加载共享Web worker?

我想用一个用户脚本加载一个共享工作者.问题是用户脚本是免费的,并且没有托管文件的商业模式 - 我也不想使用服务器,甚至是免费服务器来托管一个小文件.无论如何,我尝试了它,我(当然)得到了相同的原始政策错误:

Uncaught SecurityError: Failed to construct 'SharedWorker': Script at
'https://cdn.rawgit.com/viziionary/Nacho-Bot/master/webworker.js'
cannot be accessed from origin 'http://stackoverflow.com'.
Run Code Online (Sandbox Code Playgroud)

还有另一种方法可以通过将worker函数转换为字符串然后转换为Blob并将其作为worker加载来加载Web worker,但我也尝试过:

var sharedWorkers = {};
var startSharedWorker = function(workerFunc){
    var funcString = workerFunc.toString();
    var index = funcString.indexOf('{');
    var funcStringClean = funcString.substring(index + 1, funcString.length - 1);
    var blob = new Blob([funcStringClean], { type: "text/javascript" });
    sharedWorkers.google = new SharedWorker(window.URL.createObjectURL(blob));
    sharedWorkers.google.port.start();
};
Run Code Online (Sandbox Code Playgroud)

这也不起作用.为什么?因为共享工作程序是根据其工作文件的加载位置共享的.由于createObjectURL为每次使用生成唯一的文件名,因此工作人员将永远不会拥有相同的URL,因此永远不会共享.

我怎么解决这个问题?


注:我想询问具体的解决方案,但在这一点上,我想我能做的最好是问一个更宽泛的方式的任何 解决问题的办法,因为我所有的尝试的解决方案似乎根本不可能的,因为相同的起源政策或方式 URL.createObjectURL工作(从规范,似乎不可能改变生成的文件URL).

话虽如此,如果我的问题可以某种方式得到改善或澄清,请发表评论.

javascript greasemonkey userscripts

32
推荐指数
2
解决办法
2026
查看次数

唯一元素ID,即使元素没有

我正在写一个GreaseMonkey脚本,我正在迭代一堆元素.对于每个元素,我需要一个字符串ID,以后我可以用它来引用该元素.元素本身没有id属性,我不能修改原始文档给它一个(虽然我可以在我的脚本中进行DOM更改).我无法在我的脚本中存储引用,因为当我需要它们时,GreaseMonkey脚本本身将超出范围.例如,有没有办法获得浏览器使用的"内部"ID?只有Firefox的解决方案很好; 可以在其他场景中应用的跨浏览器解决方案非常棒.

编辑:

  • 如果GreaseMonkey脚本超出范围,您以后如何引用这些元素?他们GreaseMonkey脚本正在向DOM对象添加事件.我无法将引用存储在数组或其他类似的机制中,因为当事件触发时,数组将会消失,因为GreaseMonkey脚本将超出范围.因此,事件需要某种方式来了解脚本在附加事件时所具有的元素引用.并且所讨论的元素不是它所附着的元素.

  • 你不能只在元素上使用自定义属性吗?是的,但问题在于查找.我不得不求助于遍历所有元素,寻找将自定义属性设置为所需id的元素.那肯定会有用,但在大型文档中它可能非常耗时.我正在寻找浏览器可以执行查找工作的东西.

  • 等等,你能否或不能修改文件?我无法修改源文档,但我可以在脚本中进行DOM更改.我会在问题中澄清一下.

  • 你能不能使用封口?尽管我最初认为他们不会这样做,但Closuses确实有效.见我后来的帖子.

这听起来像是问题的答案:"我可以使用一些内部浏览器ID吗?" 没有."

javascript firefox dom greasemonkey

31
推荐指数
4
解决办法
3万
查看次数

如何确定Greasemonkey脚本未运行的原因

我试图让Greasemonkey脚本在页面上运行.但事实并非如此.

你如何调试脚本?

启动新Greasemonkey脚本的最小可能步骤是什么?

greasemonkey

31
推荐指数
5
解决办法
5万
查看次数

多次在同一页面上运行Greasemonkey脚本?

我是Greasemonkey,javascript的新手,实际上是所有UI的东西.

要求:用户脚本在页面加载后由GS运行一次.但是,我需要在不刷新的情况下多次运行相同的脚本

使用案例:例如,使用Ajax进行Amazon.com搜索.我需要在搜索结果中嵌入自定义元素.

每次在同一页面中进行搜索时,我都需要将我的内容注入search-results-div以及结果(没有页面刷新)

我当前的脚本仅在页面刷新时运行.

我希望上面的解释清楚.请帮忙.

javascript ajax greasemonkey tampermonkey

31
推荐指数
2
解决办法
1万
查看次数

使用自定义HTML而不是URL打开新选项卡

我正在创建一个Greasemonkey脚本,并且想要打开一个新的选项卡,该选项卡不会显示URL,而是一些HTML,它们是脚本的一部分.所以基本上我想做这样的事情(这显然不起作用):

window.open('<html><head></head><body></body></html>');
or
GM_openInTab('<html><head></head><body></body></html>');
Run Code Online (Sandbox Code Playgroud)

任何提示都是受欢迎的!

javascript jquery greasemonkey

30
推荐指数
2
解决办法
3万
查看次数

用户脚本中@include和@match有什么区别?

元数据块上GreaseSpot页面说两者非常相似,但@match"对*字符的含义设置了更严格的规则".然后GreaseSpot继续教授使用@include,但像这样的 Chrome示例通常似乎使用@match并表明@include仅支持兼容性目的; @match是优选的.

显然,@include google.*可以在google.evil.com上运行而@match google.*不能.
这个例子不足以真正看出通配符在这两者之间的表现如何不同,并且在这里的答案中寻求更好的解释.

@include默认情况下使用新的GreaseMonkey脚本(Firefox),而默认使用新的TamperMonkey脚本(例如Chrome)@match.

这两者之间到底有什么区别?

例如,每个人如何处理通配符?
跨浏览器兼容性有差异吗?
有人选择使用一个而不是另一个的原因是什么?

javascript greasemonkey userscripts tampermonkey

30
推荐指数
2
解决办法
7467
查看次数

如何/在何处将数据存储在Chrome Tampermonkey脚本中?

我为Facebook写了一个Greasemonkey/Tampermonkey脚本.我需要存储数据以便以后检索它.为此我用过localStorage.
那很好用.但我注意到,几个小时后,我存储的所有数据都被删除了automaticgicllay.可能Facebook本身会删除所有localStorage数据.

现在,我搜索了替代品.

  1. Cookie:当用户清除历史记录时,不会删除此项.
  2. Web SQL:显然它被w3.org删除了.所以在不久的将来我会假设chrome也可能没有使用web sql.

我想将数据存储在客户端系统中.我有什么选择?我应该使用FileSystem来存储数据吗?

javascript greasemonkey google-chrome local-storage tampermonkey

29
推荐指数
1
解决办法
2万
查看次数