애드온 빌더를 사용하여 기본 기능이있는 애드온을 빌드합니다.
- http://youtube.com
에서 의견 (A)을 받으십시오.
- 웹 서버에서이 텍스트를 처리하고 json을 반환합니다.
- (A)를 (B)로 바꾸고 사용자에게 표시합니다.
서버 요청에 문제가 있습니다 (브라우저 콘솔에 많은 줄이 있습니다) :
JSON.parse 예상치 못한 데이터 파이어 폭스 추가 기능
GET http://localhost:8084/Test/Test [HTTP/1.1 200 OK 8ms]
JSON.parse unexpected end of data fire fox addon.
하지만 마지막 요청은 성공합니다. 그리고 내 코드는 요청 응답 전에 변경 되었기 때문에 주석이 변경되지 않습니다.
lib 디렉토리/main.js
var tag = "p";
var data = require("sdk/self").data;
var pageMod = require("sdk/page-mod");
pageMod.PageMod({
include: "*.youtube.com",
contentScriptFile: data.url("element-getter.js"),
contentScriptWhen: "end"
});
데이터/요소-getter.js
var target = document.querySelector('#watch-discussion');
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
var commenttexts = document.querySelectorAll(".comment-text");
for (var i = 0; i < commenttexts.length; ++i) {
var url = "http://localhost:8084/Test/Test";
var request = new XMLHttpRequest();
var cm = " hello ";
request.open("GET", url, true);
request.onload = function() {
var jsonResponse = JSON.parse(request.responseText);
var status = jsonResponse.status;
cm = status;
};
request.send();
commenttexts[i].innerHTML = cm;
}
});
});
var config = { childList: true };
observer.observe(target, config);
JSON 서버 반환 : 당신은 assynchronous 요청을 만드는
{"status":"1","label":"true"}
for 루프 대신 forEach 루프를 수행하여 XHR 요청이 자체 클로저에 있도록 할 수 있습니다. 현재 각 루프에서 '요청'을 덮어 씁니다. – jsantell