带有';运行在';设置为';文件结束';但它会在页面加载后修改DOM

带有';运行在';设置为';文件结束';但它会在页面加载后修改DOM,dom,google-chrome-extension,content-script,Dom,Google Chrome Extension,Content Script,在我的扩展中,我试图修改的URL,我怀疑这是因为脚本是异步执行的。Chrome仅保证DOM已准备好用于document\u end内容脚本。也许你可以在document\u start中插入css,使所有图像在处理之前不可见使用chrome.webRequestapi重定向所有图像请求,你会得到更好的结果。@rsanschez我最初使用webRequestapi在onBeforeRequest中将图像请求升级为https,但我在重定向时遇到问题,如果https重定向失败,我会返回http。我需要

在我的扩展中,我试图修改
的URL,我怀疑这是因为脚本是异步执行的。Chrome仅保证DOM已准备好用于
document\u end
内容脚本。也许你可以在
document\u start
中插入css,使所有图像在处理之前不可见

使用
chrome.webRequest
api重定向所有图像请求,你会得到更好的结果。@rsanschez我最初使用
webRequest
api在
onBeforeRequest
中将图像请求升级为https,但我在重定向时遇到问题,如果https重定向失败,我会返回http。我需要一种在我的
超时\u fun
中重定向图像请求的方法<代码>重新定向
不起作用。它可以用于初始重新定向。如果它们失败了,您需要将它们重定向回代码中。我也这么想,但不知道如何使其同步。实际上,我的目标不是隐藏图像,而是希望它们的URL升级到https,并在https失败时将其重定向回http。我尝试了
document\u start
,但没有更改。您无法同步执行代码。脚本和DOM加载代码甚至可以在不同的进程中工作。我的理解是,您希望防止闪烁,我想css修改在这里会很好。或者您可以按照rsanchez建议的方式中断所有图像请求。然后,当您确定根本没有加载图像时,使用页面DOM从草稿开始
...

"content_scripts": [    
        {
            "matches": [
                "http://*/*",
                "https://*/*"
            ],
            "js": ["content.js"],
            "all_frames": true,
            "run_at": "document_end"
        }
    ],
...
images = document.getElementsByTagName("img");
for (var i = 0; i < images.length; i++)
        if (images[i].src.indexOf("http://") === 0)
                images[i].src = images[i].src.replace("http://", "https://");