JavaScript(를 통해 그리스 몽키)실패를 설정"title"속성 <a> 태그
-
06-07-2019 - |
문제
나는 다음과 같은(공정)간단한 JavaScript 코드 조각을 나는 유선으로 그리스 몽키.그것이 통 페이지 보기 위해 <a> 태그 그 href 포인트 tinyurl.com
, 가"title"속성을 식별하는 진정한 목적의 링크입니다.의 많은 중요한 코드에서 이상(지원하지 않음)그리스 몽키는 스크립트 작업 종료할 때는 내부 구성 요소를 개최 XPath 구현을 변경되었습니다.내 스크립트:
(function() {
var providers = new Array();
providers['tinyurl.com'] = function(link, fragment) {
// This is mostly taken from the (broken due to XPath component
// issues) tinyurl_popup_preview script.
link.title = "Loading...";
GM_xmlhttpRequest({
method: 'GET',
url: 'http://preview.tinyurl.com/' + fragment,
onload: function(res) {
var re = res.responseText.match("<blockquote><b>(.+)</b></blockquote>");
if (re)
{
link.title = re[1].replace(/\<br \/\>/g, "").replace(/&/g, "&");
}
else
{
link.title = "Parsing failed...";
}
},
onerror: function() {
link.title = "Connection failed...";
}
});
};
var uriPattern = /(tinyurl\.com)\/([a-zA-Z0-9]+)/;
var aTags = document.getElementsByTagName("a");
for (i = 0; i < aTags.length; i++)
{
var data = aTags[i].href.match(uriPattern);
if (data != null && data.length > 1 && data[2] != "preview")
{
var source = data[1];
var fragment = data[2];
var link = aTags[i];
aTags[i].addEventListener("mouseover", function() {
if (link.title == "")
{
(providers[source])(link, fragment);
}
}, false);
}
}
})();
(한 이유"공급자"연관 배열 설정이 그것도록 확장할 수 있는 이 커버하는 다른 URL 단축시키는 서비스 뿐만 아니라.)
내가 있는지 확인한 모든의 여러 가지 코드가되고 올바르게 도달하는 경우 이 링크를 조사되는지와 일치하지 않는 패턴이 있습니다.What 지 일어나고,어떤 변화를"속성"제목의 앵커 태그가 있습니다.데 이를 통해 불을 지르,던져 alert()
통화에서 왼쪽과 오른쪽,그리고 그것은 결코 변하지 않습니다.에서 이전의 반복 표현의 형태로 되어 있습니다.
link.title = "...";
원:
link.setAttribute("title", "...");
작동 하지 않았습니다.내가 안돼서 자바스크립트나 그리스 몽키지만,이는 나황!
해결책
를 교체하고 몸의 if
이 코드 대신 합니다.
aTags[i].addEventListener("mouseover", (function(source, fragment)
{
return function()
{
if (this.title == "")
{
(providers[source])(this, fragment);
}
}
})(data[1], data[2]), false) ;
참고가 루프가 완전한지 aTags = null;
.
귀하의 문제는 경우 문을 차단하지 않은 진정한 범위를,아무것도 var d 에 속하는 것입니다 외부 기능은 범위가 있습니다.따라서 귀하의 내부는 기능을 제공하 이벤트로 핸들러를 사용하여 소스,링크 및 조각의 마지막 전달합니다.또한을 유지하여 참조하 DOM 개체 당신은 메모리 누출로 인해 원형 참조가 있습니다.
위의 방법을 만들 새로운 범위에 각각 전달을 통한 함수 호출에 그래서 각 소스와 조각은 그것의 자신의 범위가 있습니다.그것은 또한 사용하는 사실을 기능으로 불리는 이벤트를 수신가 this
시에서 가리키는 요소를 연결되어 있고,따라서 피하는 순환을 참조를 포함하는 DOM 요소입니다.