2012-07-03 5 views
2

jquery-ui 및 jquery min에 액세스해야하는 북마크릿에서 작업하고 있습니다. 물론 페이지에 이미 jQuery가로드되고 충돌이 발생하지 않도록주의해야합니다. 내가 정상적으로 jQuery를 소개 할 수 있었다뿐만 아니라 를로드하는 UI 해킹하지만 지연에 문제가있는 것 같습니다 및 jQuery를 UI를 잘 갈 준비가없는 한 http://benalman.com/code/javascript/jquery/jquery.ba-run-code-bookmarklet.js에서 발견에 벤 독일어의 코드를 사용하여북마크릿에 jQuery 및 jQuery UI가로드되어 있지 않은 경우로드 중

멀리 ...

실제 코드를 실행하기 전에 두 스크립트를 순서대로로드하는 것을 처리하는 더 좋은 방법이 있습니까?

(function(window, document, jQuery, req_version, callback, callback_orig, parent, script){ 

    if (!window[jQuery] || req_version > window[jQuery].fn.jquery) { 
    parent = document.documentElement.childNodes[0]; 
    script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js'; 
    parent.appendChild(script); 

    callback_orig = callback; 
    callback = function($, L) { 
     '$:nomunge, L:nomunge'; 
     $(script).remove(); 
     callback_orig($, L); 
    }; 
    } 

    if (typeof jQuery.ui == 'undefined'){ 
    parent = document.documentElement.childNodes[0]; 
    scriptui = document.createElement('script'); 
    scriptui.type = 'text/javascript'; 
    scriptui.src = 'https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.js'; 
    parent.appendChild(scriptui); 
    alert('Loading your matches...'); 
    } 

    (function loopy($){ 
    '$:nomunge'; // Used by YUI compressor. 

    ($ = window[jQuery]) && req_version <= $.fn.jquery 
     ? callback(parent ? $.noConflict(1) : $, !!parent) : setTimeout(loopy, 50); 
    })(); 

})(window, document, 'jQuery', '1.3.2', 

function($,L) { 
    '$:nomunge, L:nomunge'; 

<all the jquery stuff goes here> 

이 깊이있는 답변 Using jQuery UI in a Bookmarklet에서 비슷한 질문입니다하지만 난에 "표준"JS CoffeeMarklet에서 이것을 번역 할 수 없었다.

답변

3

내 요점보기 - 이것은 jQuery를로드하기위한 북마크릿 템플릿이지만 추가 스크립트와 CSS를 지정하여 실행 전에로드 할 수 있습니다.

https://gist.github.com/2897748

는이처럼 초기화.

편집 : 종속성을로드해야하는 경우 배열을 만들어 조건에 따라 배열을 푸시 할 수 있습니다.

var jsDependencies = []; 

// This will only load jQuery UI if it does not exist already. 
// Of course if you rely on the page's copy, you have to do some 
// more advanced things to check for versions and whatnot. 
if(!window.jQuery || !window.jQuery.ui){ 
    jsDependencies.push('http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js'); 
} 

var MyBookmarklet = MyBookmarklet || new Bookmarklet({ 
    // debug: true, // use debug to bust the cache on your resources 
    css: ['/my/style.css'], 
    js: jsDependencies, 
    // jqpath: '/my/jquery.js', // defaults to google cdn-hosted jquery 
    ready: function(base) { // use base to expose a public method 
    base.init = function(){ 
     // doStuff(); 
    }  
    base.init(); 
    } 
}); 
+0

아, 너무 일찍 말했습니다. 내가 본 페이지에는 이미 UI가로드되어 js : [ 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js']에 추가되어 오류 : arr 정의되지 않았습니다, 선 74 (63 동성애 술집) –

+0

죄송합니다. 내 사과. ''''''''스크립트''로 변경해야합니다. 나는 그 요지를 갱신했다. –

+0

또한 'https : //', 'http : //'또는 '//'중 하나를 사용하십시오. 마지막 프로토콜 친화적 인 URL입니다. 스크립트에는 물건을로드 할 수있는 완전한 URI가 필요합니다. –

관련 문제