javascript - 代码在控制台和 youtube.com 上的内容脚本中的行为不同
问题描述
我正在尝试使用 chrome 扩展从 youtube.com 中删除一个元素。内容脚本运行(它可以将数据记录到控制台)但不会删除元素。但是,如果我将内容脚本的代码复制到开发人员模式控制台中,它会按预期更改页面。尝试使用内容脚本更改其他站点上的 DOM 时不会出现此问题。修改页面中的其他元素,例如删除整个正文。我使用 setTimeout 来确保页面已加载。(我知道有更好的方法,但我想快速模拟一下这个问题)
elem = document.getElementById("items")
elem.parentNode.removeChild(elem)
这两行删除推荐的视频,但仅在粘贴到控制台时。
清单文件:
{
"manifest_version": 2,
"name": "Test",
"version": "1.0",
"permissions": ["tabs","storage","declarativeContent","*://*.youtube.com/*"],
"content_scripts": [
{
"matches": ["*://*.youtube.com/*"],
"js": ["youtubeDomChange.js"]
}
],
}
youtubeDomChange.js:
setTimeout(function(){
console.log("ran")
elem = document.getElementById("items")
elem.parentNode.removeChild(elem)
},6000);
编辑1: console.log(element.parentNode)
确实从内容脚本返回不同的输出并将代码手动粘贴到控制台中。不会引发错误。
控制台输出
解决方案
推荐阅读
- android - 从 Google Play 下载单个 ARN 报告
- typescript - 如何使 ComponentOverride 通用?
- python - 如何在python中解开json文件?
- javascript - 在 gremlin 中使用 `filter` lambda 和 javascript
- google-apps-script - 在单元格“D1”中为“A1:C4”范围内的值创建注释的脚本
- c - 如何在 Glade 中添加个人图标而不污染层次结构
- python - 无法选择python版本
- html - 如何链接超过两个目录的css文件
- asp.net-core - Identity Server 4 SignInAsync 中的附加LocalClaims 的目的是什么
- hibernate - MultiTenant Hibernate + Spring boot - 如何防止它在服务器启动期间查找连接