UserScript无法在DOM中找到元素

时间:2017-04-18 03:15:59

标签: 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()在页面加载后运行代码,但它无法使代码生效。

如何在用户脚本中使用此代码?

1 个答案:

答案 0 :(得分:1)

使用元区块@run-at属性可以决定何时注入(并因此运行)代码

当您需要等待DOM完成加载时,您将使用

// @run-at document-end

但是,因为这似乎是默认的,也许你需要

// @run-at document-idle

如果代码依赖于&#34; dynamic&#34;然而,正在加载的内容 - 你很可能运气不好,必须要注意DOM的变化(使用MutationObserver

在这种情况下,您希望尽早注入脚本 - 甚至可能

// @run-at document-start

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