更新(现在给出了目标页面):问题代码与实际页面
的结构不匹配。它通常会抛出错误。TypeError: iTags[3] is undefined
使用 DOM 方法来获取所需的信息,就可以完成这项工作。一个工作脚本是:
// ==UserScript==
// @name _KROQ, song info to page title
// @include http://betaplayer.radio.com/player/*
// @grant GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
introduced in GM 1.0. It restores the sandbox.
*/
if (window.top != window.self) //-- Don't run on frames or iframes.
return;
window.addEventListener ('load', function () {
setInterval (setTitle, 5000);
}, false);
function setTitle () {
var songInfoNode = document.querySelector (
"#play_info #oflw_shield div.sleeve.hori"
);
if (songInfoNode) {
var songInfoText = songInfoNode.textContent.trim ();
//console.log ("songInfoText", songInfoText);
document.title = songInfoText;
}
}
该代码“脆弱”,但它可以在具有您似乎期望的结构的站点上正常工作。然而,唯一的“输出”是页面标题可能会改变。这不会发生吗?
以下一项或多项是脚本的直接问题:
- 该页面没有您期望的结构,因此代码会引发异常。你说,“我的调试没有抛出错误”。确认您检查了 Firefox 的错误控制台,ControlShiftJ显示设置为“错误”或“全部”。
- 脚本中的其他内容,您没有向我们展示,是问题所在。 包含或链接到完整的 Greasemonkey 脚本。
- 该脚本是在
<iframe>
d 内容上运行的,因此更改document.title
不会有明显的效果。 链接到目标页面。
作为参考,这里是该代码的更健壮版本,它也有一个控制台消息,以便您可以验证操作:
window.addEventListener ('load', function () {
setInterval (setTitle, 5000);
}, false);
function setTitle () {
console.log ("Running setTitle().");
var sInfo = document.getElementById ("play_info");
if (sInfo) {
var iTags = sInfo.innerHTML.split ("\">");
if (iTags && iTags.length > 3) {
var pTags = iTags[3].split ("<");
if (pTags && pTags.length) {
document.title = pTags[0];
}
}
}
}
请注意,以这种方式解析 HTML 并不是一个好习惯,但是如果没有看到实际的目标页面(或至少是play_info
节点的结构),我们无法提供特定的替代方案。