2

jquery-ui と jquery min へのアクセスが必要なブックマークレットに取り組んでいます。もちろん、ページに既に jQuery がロードされている可能性があり、競合を回避する必要があるという懸念があります。

http://benalman.com/code/javascript/jquery/jquery.ba-run-code-bookmarklet.jsにある Ben Alman のコードを使用して、jQuery を適切に導入し、UI をハッキングしてロードすることもできましたが、遅延に問題があるようで、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に詳細な回答がある同様の質問がありますが、これを CoffeeMarklet から「標準」の js に変換できませんでした。

4

1 に答える 1

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();
  }
});
于 2012-07-03T17:51:37.870 に答える