如果标题含糊不清,请道歉,但这不是最容易描述的问题。目前,如果您想在浏览器中包装/重载内置函数,例如XmlHttpRequest.prototype.open = function(){return oldOpen(...)}
,并且您希望在页面中的任何脚本执行之前执行此操作,则需要使用浏览器在文档开始解析之前执行的扩展/插件。问题是,浏览器扩展通常对同意安装它们的用户的转换率很低。我喜欢能够使用bookmarklet来做同样的事情(Pinterest已经表明,bookmarklet不是他们的障碍!)。但是,根据定义,bookmarklet在文档加载后很久就会运行。
我想做的事情,以及我认为理论上可行的事情,就是伪造页面重新加载,但已经插入了脚本。这个过程看起来像这样:
window.location
。window
和document
中的所有密钥...考虑到可能安装了某些扩展程序,可能需要一些iframe技巧/ messaging实际获取引用空白文档。现在,我完全愿意接受这个并开源它,但有没有人尝过这样的事情呢?这将是很多工作,我宁愿不重新发明轮子,除非我们现在使用的是相当于棍棒上的方形巨石。
答案 0 :(得分:1)
或使用适当的js shim将当前网址重写为新窗口。
(function() {
var scriptSrc = 'http://example.com/shim.js';
var rq = new XMLHttpRequest; rq.open('get', '', false);
rq.send();
var text = rq.responseText.replace('<head', '<script src="' + scriptSrc + '"></script><head');
var win = window.open();
win.document.open();
win.document.write(text);
win.document.close();
})();