2016-11-07 11 views
1

내부 네트워크에서 내 Jira 페이지를 외부 코드 사용없이 userscript를 사용하여 붉은 색으로 표시해야합니다. jQuery 등은 없습니다. 나는 단지 배우는 중이다. 예 페이지 (목록보기) 여기에 있습니다 : https://jira.atlassian.com/issues/?filter=-5Userscript getElementsByTagName이 Jira의 모든 링크를 반환하지 않습니다.

내 내부 페이지 이런 식으로 내 이름을 태그, 다음과 같습니다의 상단과 하단 라인에

<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 만하고있다 색상 변경 페이지 (로그인 한 사용자 고유의 링크가 대부분 변경됨). 그러나 사건의 목록과 양수인 목록이있는 중간은 영향을받지 않습니다. 내 스크립트는 다음과 같습니다.

// ==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"; 
    } 
} 

[assignee] 열에 내 이름을 강조 표시하려면 어떻게합니까?

P. 이것은 Ajax 질문과 같지 않습니다. 처음에는 외부 코드를 사용하지 않았으므로 외부 코드는 사용하지 않았습니다. 외부 코드 없음.

+0

그것은 내용의 일부입니다 수 XHR을 통해로드되고 스크립트가 여러 번 호출되어야합니다. 어떻게 스크립트를 실행하고 있습니까? –

+0

Ninjakit가 특별히 실행하지는 않습니다 - 전체 스크립트가 내 게시물에 있습니다. 페이지가로드 된 후에 실행되는 것 같습니다. – uldics

+0

[AJAX 요청에 대한 Fire Greasemonkey 스크립트] 가능한 복제본 (http://stackoverflow.com/questions/8281441/fire-greasemonkey-script-on-ajax-request) –

답변

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); 

이렇게하면 1 초 후에 링크가 강조 표시됩니다. 해킹 된 솔루션이지만 작동한다면 비동기 로딩이 실제로 문제라는 것을 알게 될 것입니다. 당신은 그냥 "assignee_myusername"ID를 가진 요소의 스타일을 변경하려면

, 당신은 getElementsByTagName를 사용할 필요가 없습니다, 당신은 getElementById 사용할 수 있습니다

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

시간 초과 기능을 추가하기 만하면 페이지의 모든 링크가 색상으로 표시됩니다. 그러나 추가 기준이있는 경우 변경하는 즉시 : && element.rel = "myusername" 아무 것도 강조 표시되지 않습니다. 그리고 getElementById는 하나의 요소 만 수행합니다. getElementsById는 다시 아무것도하지 않습니다. – uldics

+0

내 초보자 실수! 비교는 ==, =가 아닙니다. 보고 된 사례가 여러 개인 기자 중 한 사람의 공개 페이지 (로그인하지 않은 상태)에서 시도해 보았습니다. 이름이 불명확 한 링크가 있습니다. 그리고 나서 그것은 내 얼굴에 주먹과 같았습니다 - "==", 이제 그것은 매력처럼 작동합니다. – uldics

+0

맞아, 나는 그것을 간과했다. 가치가있는 것을 위해 항상 ===, ==을 사용해서는 안됩니다. 모든 실제 목적을 위해 이중 등호 기호는 사용되지 않습니다. –