javascript - UserScript 无法在 DOM 中找到元素

标签 javascript userscripts

<分区>

我有这个简单的用户脚本,用于更改 YouTube 页面上的某些链接:

// ==UserScript==
// @name           name
// @description    description
// @include        https://www.youtube.com/*
// @match          https://www.youtube.com/*
// ==/UserScript==

var titles = document.getElementsByClassName("vm-video-title-content");

for (var i=0; i<titles.length; i++) {
    titles[i].setAttribute("href", titles[i].getAttribute("href").replace("/edit?o=U&video_id", "watch?v"));
}

当我在小书签中使用该代码或将其粘贴到控制台时该代码有效,但在作为用户脚本安装的 Chrome 中似乎没有效果。

我曾尝试使用 window.onloadwindow.addEventListener() 使代码在页面加载后运行,但它对生成代码没有帮助工作。

如何使这段代码在用户脚本中运行?

最佳答案

使用元区 block @run-at属性允许您决定何时注入(inject)(并因此运行)代码

因为您需要等待 DOM 完成加载,所以您可以使用

// @run-at document-end

但是,因为这似乎是默认设置,也许您需要

// @run-at document-idle

如果代码依赖于正在加载的“动态”内容,那么您很可能不走运并且必须观察 DOM 中的变化(使用 MutationObserver )

在这种情况下,您需要尽早注入(inject)您的脚本 - 甚至可能

// @run-at document-start

setTimeout 应该是最后的手段,如果有的话!!

关于javascript - UserScript 无法在 DOM 中找到元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43463001/

相关文章:

javascript - Javascript 中嵌套 for 循环的替代方案

javascript - 如何检测用户脚本是否是从 Chrome 商店安装的?

javascript - 在 ui-dialog-buttonpane 中添加搜索按钮和文本框

javascript - 如何为论坛中的永久链接生成二维码?

javascript - JS计算待机

javascript - Signalr :'default' 完成 hub.server.method 调用

javascript - 如何对文档中的 IFRAME 执行 "pop out"操作?

javascript - NodeJs 和 ExpressJs 无法设置 Cookie

javascript - 创建可重用方法的问题