猴子在Safari扩展程序中修补XMLHttpRequest

时间:2018-07-19 22:54:37

标签: javascript safari safari-extension

我正在构建一个供个人使用的Safari扩展程序,我的必备条件之一就是能够监视网络请求。

为此,对于常规的XMLHttpRequest猴子补丁,我已经绰绰有余了。在SO中有很多示例,在GitHub中有很多库。我正在使用https://github.com/wendux/Ajax-hook和README中的示例代码。

我创建了一个新的Safari扩展(Safari->开发->显示扩展创建者->新扩展),创建了一个新的空字段,并复制了库和演示代码的缩小版本。然后,将扩展名的访问权限设置为“全部”,将刚刚创建的.js文件添加到“初始脚本”部分,并加载扩展名。

我希望我打开的选项卡的请求可以触发演示代码中的console.log,但它们不会触发任何事情。

如果我从扩展程序中按原样复制并粘贴代码,并将其粘贴到Safari的开发控制台中,然后尝试通过ajax加载某些内容,则会显示console.log。这使我认为Safari扩展可以使用原型覆盖的内容存在某种限制。也许还有其他一些我不知道的限制。

我想念什么?为什么XMLHttpRequest原型重写不起作用?

我的代码如下:

if (window.top === window) {
    window.onload = function() {
        // https://github.com/wendux/Ajax-hook
        <-- here goes the minified version of the lib -->

        hookAjax({
            //hook callbacks
            onreadystatechange:function(xhr){
                console.log("onreadystatechange called: %O",xhr)
            },
            onload:function(xhr){
                console.log("onload called: %O",xhr)
            },
            //hook function
            open:function(arg,xhr){
                console.log("open called: method:%s,url:%s,async:%s",arg[0],arg[1],arg[2])
            }
        });

    }
}

0 个答案:

没有答案