抱歉,如果标题含糊不清,但这不是最容易描述的问题。目前,如果您想包装/重载浏览器中的内置函数,例如XmlHttpRequest.prototype.open = function(){return oldOpen(...)}
,并且您想在页面中的任何脚本执行之前执行此操作,则需要使用在之前执行的浏览器扩展程序/插件文档开始被解析。问题是,浏览器扩展的用户同意安装它们的转化率通常很低。我希望能够使用小书签来做同样的事情(Pinterest 已经证明小书签对他们来说不是障碍!)。但遗憾的是,根据定义,小书签在文档加载后很长时间才会运行。
我想做的,我认为理论上可能的,是伪造一个页面重新加载,但已经插入了一个脚本。这个过程看起来像这样:
- 通过 XHR 下载来自
window.location
. - 从 DOM 中删除所有元素,包括所有脚本标签。也许抛出一个漂亮的闪屏以获得良好的用户体验。
- 清除所有超时和间隔(在 FF 和 Chrome 上,ID 似乎从 1 开始计数,因此不需要先验知识 AFAIK)。
- 删除/取消定义空白文档中不存在的所有键
window
...document
鉴于可能安装了一些扩展,可能需要一些 iframe 技巧/消息才能实际获得参考空白文档。 - 将您的脚本注入现在空白的文档中。
- 重新插入 XHR 原始文档中的所有标签,包括脚本,然后应该在新上下文中重新加载并重新执行。
- 取下启动画面,您就可以开始了!
现在,我非常愿意尝试并开源它,但是以前有没有人尝试过这样的事情?这将是很多工作,我宁愿不重新发明轮子,除非我们现在使用的是相当于木棍上的方形巨石。