2009-06-11 5 views
1

많은 사이트에 삽입 할 수있는 설문 초대장을 개발 중입니다. 초대장을 선물하기 위해 나는 반투명 오버레이 위에 움직이는 모달 상자를 보여주는 자바 스크립트 라이브러리 인 Modalbox을 사용하고 있습니다.프로토 타입 라이브러리를 동적으로 업그레이드/교체

이 Modalbox 라이브러리는 Prototype 및 script.aculo.us/effects 라이브러리에 따라 다릅니다. 초대장은 내가 소유하지 않은 사이트에 동적으로 삽입되며 정적으로 마크 업을 수정할 수 없습니다. 그들은 일반적으로하여 Prototype.js도 script.aculo을로드하지 않기 때문에

if (typeof Prototype == "undefined") { 
    document.write('<script type="text/javascript" src="http://mysite.com/lib/prototype.js"><\/script>'); 
} 

if (typeof Effect == "undefined") { 
    document.write('<script type="text/javascript" src="http://mysite.com/lib/scriptaculous.js?load=effects"><\/script>'); 
} 

모든 사이트의 대부분 잘 작동 : 프로토 타입이 같은로드되면 나는 (JS에서) 확인 부하시

. 우리. 그것들을로드하는 사이트가 있고로드 할 필요가 없으며 다시 작동합니다.

그러나 ... 이미로드하지만 이전 버전이 사이트가 (Modalbox은 프로토 타입 1.6.0와 script.aculo.us 1.8.0 필요) 등의 1.4.0/1.5.1

Javascript에서 프로토 타입 및/또는 script.aculo.us를 동적으로 언로드/대체 할 수 있습니까? 가능한가?

답변

2

기술적으로는 그렇게 할 수는 있지만 플러그인이 작동하도록 나머지 페이지를 무너 뜨리는 위험이 있습니까? 새로운 버전에서 작동하지 않는 다른 플러그인과의 호환성과 같이 이러한 사이트가 업그레이드되지 않은 이유가있을 수 있습니다. 프로토 타입의 최소 버전 (Prototype.Version 검토)을 사용하거나 찾지 못한 경우 코드를 사용하는 사이트를 요구하는 것이 좋습니다. Scriptaculous와 동일하게하십시오.

이렇게하면 코드의 사용자가 최선의 진행 방법을 결정할 수 있습니다. 플러그인을 삭제하거나 페이지를 업그레이드 할 수 있습니다 (관성으로 인해 이전 버전이 사용되었을 가능성이 높기 때문일 수 있음).

2

tvanfosson에 대한 응답으로 필요한 프로토 타입을 동적으로 업데이트하는 방법을 파악할 수 있다면 WTFFramework과 같은 것을 활용하여 원본 버전을 결정할 수 있어야합니다. 그런 다음 팝업을 표시하고 프로토 타입을로드 한 다음 팝업이 닫히면 원래 프로토 타입을 다시로드하십시오.

1

제 동료 중 일부는 "1.6.0"프로토 타입에 "__mySite"라는 접두사를 붙이는 등 "네임 스페이스"를 제안했습니다. 그러나 이름이 바뀐 함수에 대한 호출을 업데이트해야하므로 많은 리팩토링 작업이 필요합니다.