Page 1 of 1
확장 기능 개발중 간단한 질문 입니다.
Posted: 2006 11 17 23:39 09
by 갈리미
파폭 확장기능을 개발해 보려고 하는데요..
간단한 함수 설명좀 부탁드려 봅니다.
fgEval('//input[@name="messages"]', document);
fgEval ('//form[starts-with(@action,"messages")]', document).snapshotItem(0);
이 두가지 문장의 의미가 궁금합니다.
윗문장은 그냥 문서내의 input 태그중에 네임이 messages로 된것을 찾는것 같은데..
두번째 문장은 뭔지 이해가 안가서요..
그리고 저렇게 태그가 아니라 그냥 문서 전체에서 특정 글자를 찾는 방법은 없을까요?
어떤 폼이나 태그안에 포함된게 아닌 그냥 문자 그 자체를 찾는방법..혹시 없을까요?
Re: 확장 기능 개발중 간단한 질문 입니다.
Posted: 2006 11 18 00:35 50
by 화성
갈리미 wrote:fgEval('//input[@name="messages"]', document);
fgEval ('//form[starts-with(@action,"messages")]', document).snapshotItem(0);
어느 확장 기능을 참조하셨는지는 모르겠지만,
fgEval은
document.evaluate를 줄여쓰려고 만든 함수 같네요.
Code: Select all
document.evaluate(인수1, 인수2, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
고로 따옴표로 묶인 첫 번째 인자는
XPath 식입니다. 간단하게 설명드리면 첫 줄은
name 속성의 값이 <kbd>messages</kbd>인
input 태그를 찾는 것이고, 다음 줄은
action 속성의 값이 <kbd>messages</kbd>로 시작하는
form 태그를 찾는 것입니다. 그리고
snapshotItem은
여길 보시죠.
갈리미 wrote:그리고 저렇게 태그가 아니라 그냥 문서 전체에서 특정 글자를 찾는 방법은 없을까요?
어떤 폼이나 태그안에 포함된게 아닌 그냥 문자 그 자체를 찾는방법..혹시 없을까요?
단순하게 생각하면 식을 다음과 같이 하면 됩니다.
하지만 하고 싶으신 바에 맞게 구체적으로 식을 짜는 게 효율적일 겁니다.
감사합니다..근
Posted: 2006 11 18 13:54 57
by 갈리미
말씀하신 것처럼 해당 함수가 그런식으로 짜여져 있네요.
function fgEvalnode(path,document,node) {
var ret = document.evaluate(path,node,null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
if (fg_Debug) alert(ret.snapshotLength);
return ret;
}
function fgEval(path,document) {
return fgEvalnode(path,document,document);
}
헌데 지금 원하는 글자를 임의로 다른 글자로 바꾸려고 하는건데요.
태그를 찾기도 뭐한게.. 그냥 써있는 글이고.. 해당 ID 역시 임의로 매번 바뀝니다.
찾는 방법이라곤 결국 해당 텍스트 검사밖에 안되는데..
위에 써주신 식은 먹히질 않네요.
snapshotItem 관련링크도 안들어가지는데 어디 다른데서 볼만한곳 없을까요?
Re: 감사합니다..근
Posted: 2006 11 18 15:38 40
by 화성
Code: Select all
var nodes = document.evaluate("//text()[contains(.,'찾는말')]", document.body, null, 6, null);
for (var i = nodes.snapshotLength; i-- > 0; ) {
var node = nodes.snapshotItem(i);
node.nodeValue = node.nodeValue.replace("찾는말", "바꿀말");
}
이런 식으로 하시면 바꿀 수 있습니다.
검색엔진에서
XPath로 검색해보시면 여러 글이 나올 겁니다. 그리고 이전에 알려드린 MDC의 글이 한국어 버전도 있네요(
http://developer.mozilla.org/ko/docs/In ... JavaScript).
정말 감사합니다.
Posted: 2006 11 21 10:58 41
by 갈리미
정말 많은 도움이 되었습니다.
감사드립니다.
한가지만 더 여쭐 수 있을까요?
해당 페이지내에 포함되어 있는 자바스크립트를 변경시켜 보려고 하는데요.
문제는 해당 스크립트가 온로드시 바로 시행되는 함수라서..
임의로 바꾼다 할지라도 원래의 소스로 실행히 되는군요.
페이지의 소스보기를 해봐도 원래 소스로 나오구요.
xpath로 찾아서 바꾼후에 alert으로 표시했을땐 분명 바꾼걸로 나오는데..
어떻게 하면 좋을까요?
힌트나 아이디어좀 부탁드립니다.
그건...
Posted: 2006 11 21 18:28 00
by 화성
갈리미 wrote:해당 페이지내에 포함되어 있는 자바스크립트를 변경시켜 보려고 하는데요.
문제는 해당 스크립트가 온로드시 바로 시행되는 함수라서..
임의로 바꾼다 할지라도 원래의 소스로 실행히 되는군요.
참고하신
FoxGame과
그리스몽키와 같은 확장들은 DOMContentLoaded 이벤트를 이용하죠. 이 이벤트는 DOM이 만들어졌을 때 발생되는데, 이 시점이 onload 함수가 호출된 후일 겁니다(아니더라도 onload를 가로챌 시간이 없을 겁니다). 제가 알기론 자신만의 프로토콜을 만들지 않는 이상 소스를 고칠 수 있는 방법이 없습니다.
NoScript를 참고해 스크립트가 아예 실행되지 못하게 할 수도 있겠지만 초가삼간 태우는 격이라..
갈리미 wrote:페이지의 소스보기를 해봐도 원래 소스로 나오구요.
DOM을 고치는 건 소스를 바꾸는 게 아닙니다.
그리고 자바스크립트를 고치는 거라면
document.defaultView을 이용하는 게 좋을 것 같네요. 그 문서에 test라는 변수가 있으면 window.test로 접근할 수 있는데, document.defaultView가
window니까, document.defaultView.test로 접근해 고칠 수 있습니다. 함수를 고친다면 다음과 같이 할 수 있죠.
Code: Select all
var win = document.defaultView;
win.test = function() { ... }
감사합니다.
Posted: 2006 11 21 21:00 44
by 갈리미
웹쪽이라곤 예전에 ASP나 PHP정도 만져본게 다인데 원하는 기능이 있어
함 만들어 보려고 했더니 참 고생이네요..;;
바이블이나 한권 있으면 좋으련만 히궁..
암튼 정말 감사합니다.
위에 조언해 주신방법으로 처리하면 될것 같습니다.
파폭..참 매력적이네요^^ 쓴지는 얼마 되지 않았지만 확장기능 멋지네요 ㅎㅎ;