jQuery 플러그인이로드되었는지 어떻게 확인할 수 있습니까?


221

특정 플러그인이 사용 가능한지 확인할 수있는 방법이 있습니까?

로드중인 다른 플러그인에 따라 플러그인을 개발한다고 가정하십시오.

예를 들어 jQuery Validation 플러그인이 dateJS 라이브러리를 사용하여 주어진 날짜가 유효한지 확인하고 싶습니다. dateJS가 사용 가능한 경우 jQuery Valdation 플러그인에서 감지하는 가장 좋은 방법은 무엇입니까?



답변:


364

일반적으로 jQuery 플러그인은 jQuery 범위의 네임 스페이스입니다. 네임 스페이스가 존재하는지 확인하기 위해 간단한 검사를 실행할 수 있습니다.

 if(jQuery().pluginName) {
     //run plugin dependent code
 }

그러나 dateJs는 jQuery 플러그인이 아닙니다. javascript 날짜 객체를 수정 / 확장하며 jQuery 네임 스페이스로 추가되지 않습니다. 필요한 방법이 있는지 확인할 수 있습니다 (예 :

 if(Date.today) {
      //Use the dateJS today() method
 }

그러나 API가 기본 Date API와 겹치는 문제가 발생할 수 있습니다.


63
if (jQuery.fn.pluginName) {...}은 다른 옵션입니다
Nagyman

6
어쩌면 약간의 과잉 일 if ($.isFunction(jQuery.fn.pluginName)) { ... }수도 있지만 최소한 기능 일 수도 있습니다.
Noyo

스크립트를로드하는 함수가 있습니다 .`` LoadScript (location, namespcae, callBack)``, 콜백 함수가 일정한 간격으로 뒤 틀립니다. 즉, 네임 스페이스 window.jQuery가 설정되지 않을 때까지, 즉 콜백이 실행되지 않습니다. aj 쿼리 플러그인을로드하고 확인하기 위해, 나는 jquery select 함수를 호출해야 jQuery().pluginName하지만 LoadScript("jquery+plugin.js",jquery().plugin)jquery () 와 같은 내 함수 매개 변수 가 존재하지 않습니다.
Hassan Nisar Khan

97

올바른 jQuery 플러그인 (fn 네임 스페이스를 확장하는 플러그인)에 대해 이야기하는 경우 플러그인을 감지하는 올바른 방법은 다음과 같습니다.

if(typeof $.fn.pluginname !== 'undefined') { ... }

또는 모든 플러그인은 true와 같은 값을 갖도록 보장되므로 더 짧은 값을 사용할 수 있습니다

if ($.fn.pluginname) { ... }

플러그인 주변의 이상한 래퍼가 보여주는 것처럼 BTW, $와 jQuery는 상호 교환 가능합니다.

(function($) {
    //
})(jQuery))

폐쇄

(function($) {
    //
})

매개 변수로 'passing'jQuery를 호출하면 즉시

(jQuery)

클로저의 $는 jQuery와 동일하게 설정됩니다.


2
나는 기능을했다function isPluginLoaded(plugin) { return !!$.fn[plugin] }
styfle

2
첫 번째 예는if(typeof $.fn.pluginname != 'undefined')
dops

1
@dops가 정확하고 그에 따라 답변을 편집했지만 유형과 값을 비교하기 위해 double equals equality 대신 negated triple을 사용했지만
pwdst

1
$그리고 jQuery하지 항상 jQuery를 (예 : 워드 프레스와 같이) 할 수있는, 상호 교환에로드 노 갈등 모드 . 이 날 발생했습니다 항상 속기를 사용, 노 갈등 안전한 문서 준비 : jQuery(function($) { // $ is safe in here.... });당신이 지적으로, 또는 폐쇄 패턴 : (function($) { // $ is safe in here.... })(jQuery);내 기분 / 필요에 따라. (BTW, 추천 한 수표는 내가 선호하는 검사
이므로 상향 조정 됨

11

jQuery 플러그인을 감지하려면 대괄호를 사용하는 것이 더 정확하다는 것을 알았습니다.

if(jQuery().pluginName) {
    //run plugin dependent code
}

8

fn 네임 스페이스를 사용하지 않는 플러그인 (예 : pnotify)의 경우 다음과 같이 작동합니다.

if($.pluginname) {
    alert("plugin loaded");
} else {
    alert("plugin not loaded");
}

작동하지 않습니다.

if($.fn.pluginname)

감사. 또 다른 예
-Jquery


1

플러그인과 함께 DateJS 라이브러리를 번들로 제공하고 그 사실을 문서화하는 것이 좋습니다. 종속성을 찾아내는 것보다 더 실망스러운 것은 없습니다.

즉, 법적인 이유로 항상 모든 것을 묶을 수는 없습니다. 또한 Eran Galperin의 답변을 사용하여 플러그인의 존재를주의 깊게 확인하고 아프지 않습니다 .


1

선택한 브라우저 콘솔에서이를 실행하십시오.

if(jQuery().pluginName){console.log('bonjour');}

플러그인이 존재하면 콘솔에 응답으로 "bonjour"를 출력합니다.


-1

이런 종류의 접근 방식이 효과적입니다.

var plugin_exists = true;

try {
  // some code that requires that plugin here
} catch(err) {
  plugin_exists = false;
}

6
쉽게 감지 할 수있는 것 (그리고 쉽게 감지 할 수있는 것)을 잡기 위해 거의
공감
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.