我创建了一个替换页面函数的Greasemonkey脚本:
(function() {
var oldFunc = func;
func = function() {
oldFunc();
// other stuff
};
)();
我一直希望这个脚本能够在Gresemonkey和Chrome中运行,并且已经读过Chrome不支持unsafeWindow
,所以通过将函数转换为字符串并使用{将脚本注入到页面中{1}}:
setTimeout
这在Greasemonkey中非常有效,但在Chrome中绝对没有任何帮助。它显然没有触发,但日志中也没有出现任何内容。我尝试了许多其他注射方式,但无法获得任何工作。 (为了测试,我还在函数的顶部添加了setTimeout("(function(){var old=func;func=function(){old();/*other stuff*/}}())", 0);
。)
alert()
- 没什么setTimeout(..., 0)
- 没什么document.href = "javascript:..."
- 没什么所有这些都是document.body.addEventListener("load", ...)
。
不幸的是,这是我的第一个Chrome用户,即使经过一个小时左右的谷歌搜索和围攻SO,我仍然不知道如何调试它。有什么帮助吗?
实际脚本,目前在Greasemonkey中工作:http://pastebin.com/HtLVjYHg
答案 0 :(得分:4)
最后,我发现在Chrome中使用的唯一技术是使用DOM方法创建<script>
节点。幸运的是,这似乎在Firefox和Opera中同样有效,<func>.toString()
使其变得相当轻松:
function embed() {
var oldFunc = window.func;
window.func = function() {
oldFunc();
// other stuff
};
}
var inject = document.createElement("script");
inject.setAttribute("type", "text/javascript");
inject.appendChild(document.createTextNode("(" + embed + ")()"));
document.body.appendChild(inject);