Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome extension Chrome扩展:在加载的Dom上注入脚本_Google Chrome Extension - Fatal编程技术网

Google chrome extension Chrome扩展:在加载的Dom上注入脚本

Google chrome extension Chrome扩展:在加载的Dom上注入脚本,google-chrome-extension,Google Chrome Extension,我正在开发一个chrome扩展。实际上,我在页面加载事件中注入了一些脚本,但它会导致一个丑陋的行为(我删除了一些元素)。出于这个原因,我想在DOM加载之后注入一些脚本,几年前我就可以这样做,但现在我不可能了 您知道在当前版本中是否可能,以及如何做到这一点吗 编辑: 这是我当前的代码: chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { if (changeInfo.status === 'complet

我正在开发一个chrome扩展。实际上,我在页面加载事件中注入了一些脚本,但它会导致一个丑陋的行为(我删除了一些元素)。出于这个原因,我想在DOM加载之后注入一些脚本,几年前我就可以这样做,但现在我不可能了

您知道在当前版本中是否可能,以及如何做到这一点吗

编辑:

这是我当前的代码:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    if (changeInfo.status === 'complete') {
        chrome.tabs.executeScript(tabId,{'file':'onLoad.js'});  
    }
});

非常感谢您的帮助。

考虑到您的意图

我想在加载任何资源之前从DOM中删除元素

您可以查看并参考
run\u at
部分。您可以设置
“run\u at”:“document\u end”
,这将确保在DOM完成后但在加载任何其他资源之前插入代码

在“document_end”的情况下,文件在DOM完成后立即注入,但在图像和帧等子资源加载之前注入


考虑到你的意图

我想在加载任何资源之前从DOM中删除元素

您可以查看并参考
run\u at
部分。您可以设置
“run\u at”:“document\u end”
,这将确保在DOM完成后但在加载任何其他资源之前插入代码

在“document_end”的情况下,文件在DOM完成后立即注入,但在图像和帧等子资源加载之前注入


请创建并发布一个示例。。。很难猜测你想做什么,错误是什么……至少,解释一下你所说的丑陋行为是什么意思——以及为什么你不能复制几年前的行为。嗨。这很简单,我正在从页面中删除一些元素,因为这是在加载后完成的。你可以看到元素在几秒钟后消失,更改了网页中的布局,所以我想在呈现元素之前,在DOM加载之后执行此操作。在Chrome改变了扩展策略以及在选项卡中捕获事件和注入脚本的方式之前,我就能够做到这一点。@Iskariote,你说的“在呈现元素之前,但在DOM加载之后”是什么意思?你的意思是DOM已经完成了,但是像图片和其他资源这样的子资源还没有完成吗?大家好,我编辑了描述以添加我的实际代码@HaibaraAi,我确实在引用DOM中的元素,我之前保存了一个选择器,我想在加载任何资源之前从DOM中删除该元素。请创建并发布一个示例。。。很难猜测你想做什么,错误是什么……至少,解释一下你所说的丑陋行为是什么意思——以及为什么你不能复制几年前的行为。嗨。这很简单,我正在从页面中删除一些元素,因为这是在加载后完成的。你可以看到元素在几秒钟后消失,更改了网页中的布局,所以我想在呈现元素之前,在DOM加载之后执行此操作。在Chrome改变了扩展策略以及在选项卡中捕获事件和注入脚本的方式之前,我就能够做到这一点。@Iskariote,你说的“在呈现元素之前,但在DOM加载之后”是什么意思?你的意思是DOM已经完成了,但是像图片和其他资源这样的子资源还没有完成吗?大家好,我编辑了描述以添加我的实际代码@HaibaraAi,事实上,我正在引用DOM中的元素,我以前保存了一个选择器,我想在加载任何资源之前从DOM中删除该元素。请注意,在
changeInfo.status=='complete'
中注入将在任何情况下否定此结果,因为它在加载子资源后激发。@Xan,因此,我建议您通过
manifest.json
执行此操作,而不是通过代码进行注入。这取决于最初使用编程注入的原因。如果问题中的代码片段是实际的、未修剪的代码,那么基于清单的解决方案当然更好。否则,需要指出的是,状态“完成”已经太晚了,无法做任何事情。@Xan,有关于“加载”和“完成”的精确定义的文档吗?遗憾的是,没有。根据经验,当Chrome将微调器替换为favicon时(我认为这发生在
window.onload
之后)会触发此操作。请注意,在
changeInfo.status=='complete'
处注入将在任何情况下否定此操作,因为它在加载子资源后触发。@Xan,因此,我建议您通过
manifest.json
执行此操作,而不是通过代码进行注入。这取决于最初使用编程注入的原因。如果问题中的代码片段是实际的、未修剪的代码,那么基于清单的解决方案当然更好。否则,需要指出的是,状态“完成”已经太晚了,无法做任何事情。@Xan,有关于“加载”和“完成”的精确定义的文档吗?遗憾的是,没有。根据经验,当Chrome用favicon替换spinner时(我认为这是在
window.onload
之后发生的)就会触发这种情况