2010-07-29 2 views
1

문서를 확장하는 데 사용하는 일련의 기능 (예 : 바인딩/바인딩 해제)이 이미 있습니다. 내가 할 경우 그것은 작동하지 않는 document.bind('load',someAction,{})iframe 용 DOM 확장 문서

을 : 같은 내가 물건을 할 수 $('some_iframe').contentWindow.document.bind(...) 그리고 분명히을 $('some_iframe').contentWindow.document.prototype가 존재하지 않습니다. 편집

: 여기 코드 고장입니다 :

//the eggplant library 
eggp = { 
    extend: function(dest, source){ 
     for(var prop in source) 
      dest.prototype[prop] = source[prop]; 
     return dest; 
    }, 
    //other functions below... 
    bind{}, 
    unbind{} 
} 
//extend the DOM 
eggp.extend(Document, eggp); 
//extending the iframe document DOESN'T WORK 
eggp.extend(someiframe.contentWindow.document, eggp); 

내가 someiframe.contentWindow.document이 정의되어 있는지 확인했지만, 그것은 object HTMLDocument

+0

문서를 확장하는 코드를 제공 할 수 있습니까? –

+0

실제 문제와 직접 관련이있는 것은 아니지만 기본적으로 Prototype을 복사한다는 것을 인정할 때 자신의 라이브러리를 사용하는 이유는 무엇입니까? –

+0

나는 많은 이유로 내 자신의 라이브러리를 사용하고 있습니다. 이해하지 못하고 다른 사람의 코드를 사용할 수 없습니다. jQuery 나 프로토 타입을 이해할 수 없어서 내 자신의 글을 쓰기 시작했습니다. 프로그래밍을 담당하는 웹 빌딩 소프트웨어에 대한 라이브러리의 기능을 디자인하고 있습니다. 프로토 타입을 정확하게 복사하지 못합니다. 왜냐하면 저는 그들이 무엇을하고 있는지 파악할 수 없었기 때문입니다. 자바 스크립트에서 충분히 좋음). 그래서, 나는 단지 무엇이든하고 있다고 생각합니다. – Azmisov

답변

1

최소한 크로스 브라우저 방식으로는 불가능합니다. 이상적으로는 HTMLDocument 오브젝트의 prototype을 확장 할 수 있지만, 물론 IE에는이 오브젝트가 처음부터 없습니다. 이 문제를 해결하기 위해 IFrame을 만들고 자동으로 document 개체를 확장하는 함수를 만들 수 있으며 해당 함수를 독점적으로 사용하여 IFrame을 만들 수 있습니다. 그러나 프레임이 이미 페이지에 있으면 많은 작업을 수행 할 수 있습니다. 각 루프를 반복하고 수동으로 확장하지 못합니다.

$('iframe').each(function() { 
    MyLibrary.extend(this.contentWindow.document, MyDocumentPrototype); 
}); 

은 (JQuery와, 여기에 모두의 iframe을 얻기 위해 자신의 라이브러리 코드를 삽입 가정.) 일반적으로

하지만, 내장 DOM 객체를 확장하는 것은 bad idea, 당신은 다른 방법을 마련한다 그래서 당신이 원하는 것을 할 수 있습니다.

+0

그래, DOM 확장 문제를 깨닫기 시작 했어.하지만 더 나은 인터페이스를 만들 수있을만큼 충분히 배울 때까지 계속 노력할 것 같아. 어쨌든 ... 당신의 예와 유사한이 코드에서는 내 라이브러리를 사용 : 'eggp.extend (someiframe.contentWindow.document, eggp),' 이 반환은'dest.prototype는 undefined' – Azmisov

+0

@Azmisov입니다' document'는'prototype' 객체를 가지고 있지 않습니다. 직접 확장해야합니다 :'document.property1 = "blah"'등 –

+0

고마워요, 그게 내가 알아야 할 전부입니다. – Azmisov

0

어떻게 처음 document을 확장하고 반환? 후자가 생성자가 아니기 때문에 document.prototype 대신 HTMLDocument.prototype을 확장하지 않아도됩니까?

당신은 iframe에서 잘못된 것을 확장하고 있습니까? 제가 틀렸다면 처음에 어떻게 확장했는지 말해주십시오.

+0

내 확장 함수는 대상과 소스를 참조합니다. 그런 다음 모든 소스 함수를 반복하고 대상을 확장합니다. 그래서 : dest.prototype [prop] = src [prop], prototype.js가하는 것을 모방 한 것입니다. 그래서, 함수의 라이브러리를 사용하여 문서를 확장하려면 다음과 같이 말합니다 : library.extend (Document, library); document.bind (...)를 수행하지만 iframe.contentWindow.document는 수행하지 않습니다. 그럼 대신 HTMLDocument를 사용해야합니까? – Azmisov

+0

HTMLDocument를 사용하여 확인한 결과 아무런 변화가 없었습니다. – Azmisov

-1

"some_iframe"은 ID입니다. jQuery로 ID로 개체를 선택하려면 CSS와 마찬가지로 #을 사용해야합니다.

따라서 $('#some_iframe').eq(0).contentWindow.document.prototype이어야합니다.

태그 이름으로 선택하는 데 사용되는 #을 사용하지 않는 경우.

그래서 $('p')은 페이지의 모든 <p> 태그를 선택합니다.

+0

왜 downvote 모르겠어요. 그러나 나는 내가 말한 것에 내가 옳다고 확신한다. – Strelok

+0

질문과 관련이 없습니다. (나는 기록을 위해 당신에게 다운 다운을하지 않았다.) –

+0

나는 당신의 답을 downvote하지 않았지만, 나는 나 자신의 도서관을 사용하고있다. – Azmisov