为什么 Greasemonkey javascript 报告一个元素有 class 而 Web 开发者工具表明它似乎没有
Why is Greasemonkey javascript reporting an element has a class when web developer tools indicates that it doesnt seem to have
我正在尝试编写一个自动按下页面上的按钮的 greasemonkey 脚本,但只有在禁用选项卡时,该选项卡才会显示重复记录,并且当我使用 Web Devloper 在 firefox 中检查页面时 Tools/Inspector 我发现当我们有重复记录并且启用了选项卡时,我们有
<li class="ui-state-default ui-corner-top" role="tab" tabindex="-1" aria-controls="duplicates-tab" aria-labelledby="ui-id-2" aria-selected="false"><a href="#duplicates-tab" class="ui-tabs-anchor" role="presentation" tabindex="-1" id="ui-id-2">Release Duplicates</a></li>
但是当它被禁用时我有
<li class="ui-state-default ui-corner-top ui-state-disabled" role="tab" tabindex="-1" aria-controls="duplicates-tab" aria-labelledby="ui-id-2" aria-selected="false" aria-disabled="true"><a href="#duplicates-tab" class="ui-tabs-anchor" role="presentation" tabindex="-1" id="ui-id-2">Release Duplicates</a></li>
即禁用时 link 的封闭列表元素有一个额外的 ui-state-disabled class(这是我在检查 html)
时发现的唯一区别
所以我写了我的greasemonkey脚本如下
// ==UserScript==
// @name AutoContinueAddRelease
// @version
// @grant none
// @include https://musicbrainz.org/release/add
// ==/UserScript==
window.addEventListener ("load", Greasemonkey_main, false);
function Greasemonkey_main ()
{
var as = document.getElementsByTagName("a");
for(a of as)
{
if(a.href=='https://musicbrainz.org/release/add#duplicates-tab')
{
alert(a.parentElement.classList);
if(a.parentElement.classList.contains('ui-state-disabled'))
{
var button = document.getElementById("enter-edit");
if(button!=null)
{
button.click();
}
}
break;
}
}
}
但在这两种情况下,它都会找到 ui-state-disabled class 并提交表单,这不是我想要的,我不想明白为什么。
根据@Ourobirus 评论
,通过设置超时来延迟 运行 脚本直到页面加载一段时间后解决了这个问题
// ==UserScript==
// @name AutoContinueAddRelease
// @version
// @grant none
// @include https://musicbrainz.org/release/add
// ==/UserScript==
setTimeout(check, 5000);
function check()
{
var as = document.getElementsByTagName("a");
for(a of as)
{
if(a.href=='https://musicbrainz.org/release/add#duplicates-tab')
{
if(a.parentElement.classList.contains('ui-state-disabled'))
{
var button = document.getElementById("enter-edit");
if(button!=null)
{
button.click();
}
}
else
{
alert('duplicatesFound');
}
break;
}
}
}
我正在尝试编写一个自动按下页面上的按钮的 greasemonkey 脚本,但只有在禁用选项卡时,该选项卡才会显示重复记录,并且当我使用 Web Devloper 在 firefox 中检查页面时 Tools/Inspector 我发现当我们有重复记录并且启用了选项卡时,我们有
<li class="ui-state-default ui-corner-top" role="tab" tabindex="-1" aria-controls="duplicates-tab" aria-labelledby="ui-id-2" aria-selected="false"><a href="#duplicates-tab" class="ui-tabs-anchor" role="presentation" tabindex="-1" id="ui-id-2">Release Duplicates</a></li>
但是当它被禁用时我有
<li class="ui-state-default ui-corner-top ui-state-disabled" role="tab" tabindex="-1" aria-controls="duplicates-tab" aria-labelledby="ui-id-2" aria-selected="false" aria-disabled="true"><a href="#duplicates-tab" class="ui-tabs-anchor" role="presentation" tabindex="-1" id="ui-id-2">Release Duplicates</a></li>
即禁用时 link 的封闭列表元素有一个额外的 ui-state-disabled class(这是我在检查 html)
时发现的唯一区别所以我写了我的greasemonkey脚本如下
// ==UserScript==
// @name AutoContinueAddRelease
// @version
// @grant none
// @include https://musicbrainz.org/release/add
// ==/UserScript==
window.addEventListener ("load", Greasemonkey_main, false);
function Greasemonkey_main ()
{
var as = document.getElementsByTagName("a");
for(a of as)
{
if(a.href=='https://musicbrainz.org/release/add#duplicates-tab')
{
alert(a.parentElement.classList);
if(a.parentElement.classList.contains('ui-state-disabled'))
{
var button = document.getElementById("enter-edit");
if(button!=null)
{
button.click();
}
}
break;
}
}
}
但在这两种情况下,它都会找到 ui-state-disabled class 并提交表单,这不是我想要的,我不想明白为什么。
根据@Ourobirus 评论
,通过设置超时来延迟 运行 脚本直到页面加载一段时间后解决了这个问题// ==UserScript==
// @name AutoContinueAddRelease
// @version
// @grant none
// @include https://musicbrainz.org/release/add
// ==/UserScript==
setTimeout(check, 5000);
function check()
{
var as = document.getElementsByTagName("a");
for(a of as)
{
if(a.href=='https://musicbrainz.org/release/add#duplicates-tab')
{
if(a.parentElement.classList.contains('ui-state-disabled'))
{
var button = document.getElementById("enter-edit");
if(button!=null)
{
button.click();
}
}
else
{
alert('duplicatesFound');
}
break;
}
}
}