QUOTE(OnceForAll @ Jan 12 2023, 13:02)

没记错的话,那个函数是叫 getTimeZone()、干的事情是从 User Center 首页获取时区配置。
我发现我出的错不是因为这个。
我出错的那句是:
CODE
var threadTitle = tr.children[2].getElementsByTagName('span')[0].textContent;
var threadNumber = tr.children[2].getElementsByTagName('span')[0].getElementsByTagName('a')[0].href.match(/showtopic=(\d+)/)[1];
这句话所在的函数是在一个文档(参数data)上处理(应该是xhr下来的)
然后我发现他在处理https://forums.e-hentai.org/index.php?showforum=76 时崩了 (IMG:[
invalid]
style_emoticons/default/dry.gif)
最后定位到html元素就是shank发的那个Announcement: The Quests & Activities Board
至于为什么它会崩,其实是一个trick不那么适用了。目前论坛帖子列表中的标题几乎都是一个span里套一个a,但是
个Announcement出了例外,它长这样:
<b>Announcement: <a href="https://forums.e-hentai.org/index.php?act=announce&f=76&id=20">The Quests & Activities Board</a></b>
它是b套a,于是匹配机制寄了。
加一点fallback:
CODE
var threadTitleTBlock = tr.children[2]
var threadTitleContainer = threadTitleTBlock.getElementsByTagName('span')[0];
var threadHrefElement;
if (threadTitleContainer) {
// 正常,直接获取链接
threadHrefElement = threadTitleContainer.getElementsByTagName('a')[0]
} else {
// 没有span,fallback到格内第一个a元素的父元素
threadHrefElement = threadTitleTBlock.getElementsByTagName('a')[0]
threadTitleContainer = threadHrefElement.parentElement
}
var threadTitle = threadTitleContainer.textContent;
var threadNumber = threadHrefElement.href.match(/showtopic=(\d+)/)[1];
然后在threadNumber寄了。因为那个announcement本来就不是一般的thread,正则匹配出来是空的 (IMG:[
invalid]
style_emoticons/default/huh.gif)
那直接套个try罢
CODE
try {
var threadNumber = threadHrefElement.href.match(/showtopic=(\d+)/)[1];
} catch(err) {
continue;
}
This post has been edited by tsXor: Jan 13 2023, 03:44