Userscript getElementsByTagName不返回Jira页面的所有链接

时间:2016-11-07 20:28:16

标签: javascript jira userscripts

我需要在内部网络上创建我的Jira页面,使用用户脚本显示我的受理人名称,不使用任何外部代码 - 没有jQuery等等。尽可能简单,因为我只是在学习。 示例页面在这里(列表视图):https://jira.atlassian.com/issues/?filter=-5

我的内部网页上有以下标记,其中包含我的名字,如下所示:

<a class="user-hover" rel="myusername" id="assignee_myusername" href="https://jira.mydomain.org/secure/ViewProfile.jspa?name=myusername" target="_parent">Myfirstname Mylastname</a>

我的用户脚本只在页面的顶行和底行进行颜色更改(我已登录;它会更改用户特定的大多数链接)。但列出案件和受让人名单的中间人并未受到影响。这是我的剧本:

// ==UserScript==
// @name           Jira
// @namespace      https://jira.mydomain.org/secure/Dashboard.jspa
// @include        https://jira.mydomain.org/*
// ==/UserScript==
var links = document.getElementsByTagName( 'a' );
var element;
    for ( var i = 0; i < links.length; i++ ) {
    element = links[ i ];
    if ( element.id = "assignee_myusername" ) {
        element.style.color = "red";
        element.style.backgroundColor = "black";
    }
}

如何在“受理人”栏中突出显示我的名字?

P.S。这与Ajax问题不同,因为它使用我在开头指定的外部代码 - 没有外部代码。没有外部代码。

1 个答案:

答案 0 :(得分:0)

我的猜测是,当您的用户脚本执行时,尚未加载要编写脚本的Jira页面部分。 Jira使用Ajax以异步方式加载页面的一部分。尝试在代码周围添加setTimeout

window.setTimeout(function () {
    var links = document.getElementsByTagName( 'a' );
    var element;
    for ( var i = 0; i < links.length; i++ ) {
        element = links[ i ];
        if ( element.id = "assignee_myusername" ) {
            element.style.color = "red";
            element.style.backgroundColor = "black";
        }
    }
}, 1000);

这将在一秒钟后突出显示链接。它是一个hacky解决方案,但如果它有效,那么至少会告诉你异步加载实际上是问题。

如果您只想更改ID为“assignee_myusername”的元素的样式,则不需要使用getElementsByTagName,您可以使用getElementById

window.setTimeout(function () {
    var element = document.getElementById( 'assignee_myusername' );
    element.style.color = "red";
    element.style.backgroundColor = "black";
}, 1000);