1

仕事用に書いた一連のスクリプトの cdn を作成しています。以前はそれらを配布し、各人がファイルを取得してコンピューターにインストールする必要がありましたが、それらを amazon cloudfront/s3 インスタンスに移動しています。

これを使用してブックマークレットを挿入します: http://allben.net/post/2010/01/30/CSS-JavaScript-Injection-Bookmarklets

ただし、これを行っていた古い方法では、jquery ブックマークレット ジェネレーターを使用していました。これはそれとは異なり、使用したい場合に jquery を含める方法がわかりません。

スクリプトの例を次に示します。

javascript:(function(){var%20s=document.createElement('script');s.setAttribute('src','cdn.domain.com/scripts/somescript.js');document.getElementsByTagName('body')[0].appendChild(s);})();

それはブックマークに入ります。

スクリプト:

alert($(somecontainer).size());

ブックマークレットがjqueryを注入しなくなったため、明らかにこれは機能しません。それで、これについて行く最善の方法は何ですか?

4

1 に答える 1

1

あなたが直面している問題は、jQuery ブックマークレット ジェネレーターがページ内で利用できないことだと思い$ます。関数内で jQuery 変数を分離したままにし、実行後に jQuery をページから完全に削除します。

以下は、ここからのコードの修正版です: http://benalman.com/projects/run-jquery-code-bookmarklet/動作するはずです。

function (e, a, g, h, f, c, b, d) {
  if (!(f = e.jQuery) || g > f.fn.jquery || h(f)) {
    c = a.createElement("script");
    c.type = "text/javascript";
    c.src = "http://ajax.googleapis.com/ajax/libs/jquery/" + g + "/jquery.min.js";
    c.onload = c.onreadystatechange = function () {
      if (!b && (!(d = this.readyState) || d == "loaded" || d == "complete")) {
        var s = document.createElement('script');
        s.setAttribute('src', 'cdn.domain.com/scripts/somescript.js');
        document.getElementsByTagName('body')[0].appendChild(s)
      }
    };
    a.documentElement.childNodes[0].appendChild(c)
  }
})(window, document, "1.3.2")

jQueryこれにより、ページ上のすべての$変数が置き換えられることに注意してください。これらの変数をすでに使用しているページでブックマークレットを実行する必要がある場合は、jQuery.noConflict(1). たとえば、代わりに_jq = e.jQuery.noConflict(1)使用して、元の値と元の値に戻します。例:_jq$$jQuery

alert(_jq(somecontainer).size());

.js コードで noConflict だけでなく $ も使用する場合は、コードを関数でラップし、ローカル スコープの$. 例:

(function(){
  var $ = _jq;  // this $ will not affect any $ that exists outside this function.
  alert($(somecontainer).size());
})();
于 2013-02-13T17:45:15.787 に答える