我有以下情况:
我以为我可以设置一个paintmonkey脚本来操纵news.html,从而也可以操作主网站。 然而,这个假设是错误的:当我在浏览器中打开news.html时,新闻被操纵(就数据而言 - 只是为了澄清这一点),但是当我访问主网站时,新闻不会被操纵。
我认为当浏览器中没有“直接”打开网站时,greasemonkey不起作用,但是使用ajax / jQuery /....
是否有任何已知的解决方法?
提前致谢!
答案 0 :(得分:0)
您不能使用greasemonkey更改服务器上的文件,除非由于某种原因API因此暴露。无论您改变什么,都是您的本地人。
答案 1 :(得分:0)
对于简单页面,最好将greasemonkey脚本包装在至少一个卸载处理程序中:根据http://greasemonkey.mozdev.org/authoring.html的“创作”页面,
用户脚本在DOM完全加载之后执行,但之前执行 onload发生。这意味着您的脚本可以立即开始 不需要等待onload。但是,更换大部分的 DOM(例如使用innerHTML或outerHTML)在这个早期阶段 已知渲染会导致Firefox出现问题。在这种情况下,你会 如果您响应load事件调用代码,则会获得更多成功 代替:
window.addEventListener("load", function(e) {
document.innerHTML = "Hello, world!";
}, false);
但是,如果“主站点”通过对news.html
的辅助ajax调用来构建自身,这是不够的,因为您想要操作的数据将不在DOM中脚本在主站点上运行。你需要延迟你的脚本的执行,直到主站点完成它的事情,所以当你尝试做你的事情时,那里有你可以做的事情。可以这么说。
让你的脚本观察DOM并等到news.html被注入主站点之后一直运行,或者懒惰并在足够长的setTimeout
之后启动它。
(根据评论中的讨论澄清:Greasemonkey只会对浏览器中实际加载的网站起作用;它不会直接对网站发出的每个XHR请求起作用,即使该网址中包含@lluded的网址也是如此因此,如果网站“foo.com”ajax-从“bar.com/news.html”注入内容,并且浏览器加载了“foo.com”,则greasemonkey不会直接修改“bar.com/news.html”请求foo.com制作;它只能与foo.com基于从news.html获得的内容构建的DOM一起使用。)