如何在处理DOM之前使用谷歌浏览器内容脚本修改网页?

时间:2011-06-10 09:35:04

标签: javascript google-chrome-extension

使用chrome内容脚本我想在加载内容之前删除网页中的几个iframe。

我发现,在扩展清单中使用属性run_at:document_start我的javascript是在主页面请求之后和处理DOM之前执行的,并且加载了图像,iframe等。此时逻辑上DOM结构不可用,我无法使用如下命令修改页面:

myelement=document.getElementById('iframeX');

myelement.parentNode.removeChild(myelement);

我如何访问和修改所需的页面数据呢?

2 个答案:

答案 0 :(得分:7)

您需要在document_start上触发内容脚本并添加beforeload侦听器 - 您可以使用event.preventDefault选择性地阻止加载内容,然后删除尝试加载内容的帧:

    document.addEventListener('beforeload', function(event) {
        if (event.url.match('facebook')) {
            event.preventDefault();
            $(event.target).remove();
        }
    }, false);

我也blogged about an equivalent approach to using the beforeload event for Firefox

答案 1 :(得分:2)

manifest.json应该包含content_scripts,如:

"content_scripts": [
    {   
        "matches": ["*://*/*"], 
        "js": [ "scan.js" ],
        "run_at": "document_start",
        "all_frames" : true
    }
]