微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获得对DOM中每个“ src”属性更改的控制

如何解决获得对DOM中每个“ src”属性更改的控制

我正在编写一个Javascript代码,该代码需要监视新的'script'元素并阻止一些已知源。

要捕获这些错误,我尝试使用 MutationObserver 和__ definesetter __, 两者都可以监视'src'的更改,但是只有在HTTP请求已经发送之后-即便我更改了src,它也并没有真正被阻止。

window.HTMLScriptElement.prototype.__definesetter__('src',function (d) 
    {
        console.log("HTMLScriptElement: ",d);
        if (d.indexOf('localhost') != -1) {
            //BLOCK SCRIPT
        }
    });

    new MutationObserver(function (a) {
        a.forEach((e) => {
            e.addednodes.forEach((z) => 
            {
                if (z.nodeName.toLowerCase() == "script" && z.src.indexOf('localhost') != -1) 
                {
                    //BLOCK SCRIPT
                }
            })
        })
    }).observe(window.document,{
        attributes: true,childList:true,subtree:true
    });

解决方法

您可以使用Service workers来拦截网络请求。这样的事情应该可以解决问题:

self.addEventListener('fetch',function (event) {
    const blockedUrls = [
        //...
    ];
    if (blockedUrls.some(x => event.request.url.startsWith(x))) {
        event.respondWith(new Response('blocked',{ status: 401,statusText: 'Unauthorized' }));
    }
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。