파폭 확장기능을 개발해 보려고 하는데요..
간단한 함수 설명좀 부탁드려 봅니다.
fgEval('//input[@name="messages"]', document);
fgEval ('//form[starts-with(@action,"messages")]', document).snapshotItem(0);
이 두가지 문장의 의미가 궁금합니다.
윗문장은 그냥 문서내의 input 태그중에 네임이 messages로 된것을 찾는것 같은데..
두번째 문장은 뭔지 이해가 안가서요..
그리고 저렇게 태그가 아니라 그냥 문서 전체에서 특정 글자를 찾는 방법은 없을까요?
어떤 폼이나 태그안에 포함된게 아닌 그냥 문자 그 자체를 찾는방법..혹시 없을까요?
확장 기능 개발중 간단한 질문 입니다.
-
- 서포터즈
- Posts: 168
- Joined: 2005 02 17 00:49 53
- Location: 구미
- Contact:
Re: 확장 기능 개발중 간단한 질문 입니다.
어느 확장 기능을 참조하셨는지는 모르겠지만, fgEval은 document.evaluate를 줄여쓰려고 만든 함수 같네요.갈리미 wrote:fgEval('//input[@name="messages"]', document);
fgEval ('//form[starts-with(@action,"messages")]', document).snapshotItem(0);
Code: Select all
document.evaluate(인수1, 인수2, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
단순하게 생각하면 식을 다음과 같이 하면 됩니다.갈리미 wrote:그리고 저렇게 태그가 아니라 그냥 문서 전체에서 특정 글자를 찾는 방법은 없을까요?
어떤 폼이나 태그안에 포함된게 아닌 그냥 문자 그 자체를 찾는방법..혹시 없을까요?
Code: Select all
"//text()[contains(.,'찾을말')]"
감사합니다..근
말씀하신 것처럼 해당 함수가 그런식으로 짜여져 있네요.
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 관련링크도 안들어가지는데 어디 다른데서 볼만한곳 없을까요?
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 관련링크도 안들어가지는데 어디 다른데서 볼만한곳 없을까요?
-
- 서포터즈
- Posts: 168
- Joined: 2005 02 17 00:49 53
- Location: 구미
- Contact:
Re: 감사합니다..근
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).
-
- 서포터즈
- Posts: 168
- Joined: 2005 02 17 00:49 53
- Location: 구미
- Contact:
그건...
참고하신 FoxGame과 그리스몽키와 같은 확장들은 DOMContentLoaded 이벤트를 이용하죠. 이 이벤트는 DOM이 만들어졌을 때 발생되는데, 이 시점이 onload 함수가 호출된 후일 겁니다(아니더라도 onload를 가로챌 시간이 없을 겁니다). 제가 알기론 자신만의 프로토콜을 만들지 않는 이상 소스를 고칠 수 있는 방법이 없습니다. NoScript를 참고해 스크립트가 아예 실행되지 못하게 할 수도 있겠지만 초가삼간 태우는 격이라..갈리미 wrote:해당 페이지내에 포함되어 있는 자바스크립트를 변경시켜 보려고 하는데요.
문제는 해당 스크립트가 온로드시 바로 시행되는 함수라서..
임의로 바꾼다 할지라도 원래의 소스로 실행히 되는군요.
DOM을 고치는 건 소스를 바꾸는 게 아닙니다.갈리미 wrote:페이지의 소스보기를 해봐도 원래 소스로 나오구요.
그리고 자바스크립트를 고치는 거라면 document.defaultView을 이용하는 게 좋을 것 같네요. 그 문서에 test라는 변수가 있으면 window.test로 접근할 수 있는데, document.defaultView가 window니까, document.defaultView.test로 접근해 고칠 수 있습니다. 함수를 고친다면 다음과 같이 할 수 있죠.
Code: Select all
var win = document.defaultView;
win.test = function() { ... }
Who is online
Users browsing this forum: No registered users and 0 guests