我有这个简单的用户脚本,旨在更改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.onload
和window.addEventListener()
在页面加载后运行代码,但它无法使代码生效。
如何在用户脚本中使用此代码?
答案 0 :(得分:1)
使用元区块@run-at属性可以决定何时注入(并因此运行)代码
当您需要等待DOM完成加载时,您将使用
// @run-at document-end
但是,因为这似乎是默认的,也许你需要
// @run-at document-idle
如果代码依赖于&#34; dynamic&#34;然而,正在加载的内容 - 你很可能运气不好,必须要注意DOM的变化(使用MutationObserver)
在这种情况下,您希望尽早注入脚本 - 甚至可能
// @run-at document-start
setTimeout应该是最后的手段,如果有的话!!