gpt4 book ai didi

javascript - addEventListener 和 setInterval 在 Greasemonkey 脚本中静默失败

转载 作者:行者123 更新时间:2023-11-28 02:07:07 26 4
gpt4 key购买 nike

我试图让代码每隔 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);
});

这是 Greasemonkey 脚本中的代码,将在 Firefox 中运行。谢谢。

最佳答案

更新(现在目标页面已给出):
问题代码与 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;
}
}


<小时/>

该代码“脆弱”,但它在具有您似乎期望的结构的网站上可以正常工作。然而,唯一的“输出”是页面标题可能发生变化。这不会发生吗?

以下一个或多个问题是脚本的直接问题:

  • 该页面没有您期望的结构,因此代码会引发异常。你说,“我的调试没有抛出任何错误”。确认您检查了 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 节点的结构),我们无法提供特定的替代方案。

关于javascript - addEventListener 和 setInterval 在 Greasemonkey 脚本中静默失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17614067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com