我正在尝试让代码执行每x个时间,并在第一次加载页面后开始这样做,而我的调试没有抛出错误,脚本实际上没有做任何事情。
所以,我有点失落,我认为它与语法或嵌套代码的方式有关。你是否可以如此善良地查看下面的代码并告诉我,我做错了什么,以及是否有更好的方法来解决它?
window.addEventListener('load', function() {
setInterval(function setTitle(){
var sInfo = document.getElementById("play_info");
var iTags = sInfo.innerHTML.split("\">");
var pTags = iTags[3].split("<");
document.title = pTags[0];
return setTitle;
},5000);
});
这是将在Firefox中运行的Greasemonkey脚本中的代码。谢谢。
答案 0 :(得分:1)
更新(现在已提供目标页面):
问题代码与the actual page的结构不匹配。它通常会抛出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;
}
}
该代码“脆弱”,但它可以在具有您期望的结构的网站上正常工作。但是,唯一的“输出”是页面标题可能更改。那不会发生吗?
以下一项或多项是脚本的立即问题:
<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
节点的结构),我们无法提供特定的替代方案。
答案 1 :(得分:0)
正如Brandon Boone所说,如果您正在寻找纯JS解决方案来查找addEventListener
的跨浏览器解决方案,我建议您使用这样的解决方案。
var e = window.addEventListener ? window.addEventListener : window.attachEvent;
e('load',function(){ ... };