操纵使用Greasmonkey从另一个网站调用的网站

时间:2016-02-01 18:06:13

标签: javascript html greasemonkey

我有以下情况:

  • 网站从另一个html文件(“news.html”)获取数据,该文件每隔10秒左右调用一次
  • 我想操纵news.html中的数据

我以为我可以设置一个paintmonkey脚本来操纵news.html,从而也可以操作主网站。 然而,这个假设是错误的:当我在浏览器中打开news.html时,新闻被操纵(就数据而言 - 只是为了澄清这一点),但是当我访问主网站时,新闻不会被操纵。

我认为当浏览器中没有“直接”打开网站时,greasemonkey不起作用,但是使用ajax / jQuery /....

是否有任何已知的解决方法?

提前致谢!

2 个答案:

答案 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一起使用。)