Greasemonkeyスクリプトを作成しようとしていますが、jQueryライブラリを使用して作成したいのですが、WebアドレスからjQueryを含めてローリングする方法がよくわかりません。
jQuery(GoogleのWebサーバーから)をgreasemonkeyスクリプトに含めて、次のようにするにはどうすればよいですか?
$(document).ready(function(){
// Greasemonkey stuff here
});
私はこのソースからそれを取得したいと思います:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript" charset="utf-8"></script>
更新:助けてくれてありがとう、答えはとても有益でした。ただし、GoogleFuをもう少し活用して、このソリューションに出くわしました: http://joanpiedra.com/jquery/greasemonkey/
チャームのように機能します。ソースをGoogleがホストするバージョンのjQueryに更新するだけで完了します。
最近のバージョンのgreasemonkeyで推奨される方法は、@ requireコメントタグを使用することです。
例えば。
// ==UserScript==
// @name Hello jQuery
// @namespace http://www.example.com/
// @description jQuery test script
// @include *
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// ==/UserScript==
ただし... jQuery 1.4.1および1.4.2はこのメソッドと互換性がないことに注意してください
これを指摘してくれたPaulTarjanに感謝します。 jQueryフォーラムスレッド を参照してください。
これらの@requireセマンティクスにも注意してください
ユーザースクリプトがインストールされると、Greasemonkeyは、ほぼ瞬時に読み取ることができるリモートファイルのローカルにキャッシュされたコピーをダウンロードして保持します。キャッシュされたコピーは、インストールしたユーザースクリプトと同じフォルダーに保存されます。リモートファイルの変更は監視されません。
この回答を書いている時点では、この@requireタグはインストール時にのみ読み取られることに注意してください。既存のユーザースクリプトを編集してこのタグを追加すると、無視されます。変更を取得するには、ユーザースクリプトをアンインストールして再インストールする必要があります。
から ここ :
// ==UserScript==
// @name jQueryTest
// @namespace http://www.example.com/
// @include *
// ==/UserScript==
// Add jQuery
var GM_JQ = document.createElement('script');
GM_JQ.src = 'http://jquery.com/src/jquery-latest.js';
GM_JQ.type = 'text/javascript';
document.getElementsByTagName('head')[0].appendChild(GM_JQ);
// Check if jQuery's loaded
function GM_wait() {
if(typeof unsafeWindow.jQuery == 'undefined')
{ window.setTimeout(GM_wait,100); }
else { $ = unsafeWindow.jQuery; letsJQuery(); }
}
GM_wait();
// All your GM code must be inside this function
function letsJQuery() {
alert($); // check if the dollar (jquery) function works
// the next call fails
$("<div id='example' class='flora' title='This is my title'>I'm in
a dialog!</div>").dialog({
buttons: {
"Ok": function() {
alert("Ok");
},
"Cancel": function() {
$(this).dialog("close");
}
}
});
}
完全に機能しますが、実行するサイトを制限するか、帯域幅を盗まないように自分のサイトでjQueryjsファイルをホストすることをお勧めします。
スクリプト要素を動的に作成してみることができます。
var script = document.createElement("script");
script.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js";
document.getElementsByTagName("head")[0].appendChild(script);
スクリプトのロード中に少し遅延する必要がある場合があります(setTimeout?)
クリスの答え に基づいて、私は次のように自分のニーズに適応します。
// ==UserScript==
// @description require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.jss
// @name Baidu Mask
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match https://www.ibm.com/developerworks/cn/opensource/os-cn-greasemonkey/index.html
// @match *://www.baidu.com/*
// @match *://baike.baidu.com/*
// @match *://zhidao.baidu.com/*
// @match *://www.weather.com.cn/*
// @grant none
// ==/UserScript==
(function () {
'use strict';
// Your code here...
var $j;
function GM_wait() {
if (typeof jQuery === 'undefined') {
window.setTimeout(GM_wait, 100);
}
else {
$j = jQuery.noConflict();
doJob();
}
}
function loadJquery() {
// Check if jQuery's loaded
if (typeof jQuery === 'undefined') {
// Add jQuery
var GM_JQ = document.createElement('script');
GM_JQ.src = 'https://code.jquery.com/jquery-1.12.4.min.js';
GM_JQ.type = 'text/javascript';
GM_JQ.id = 'jquery-lyz';
document.getElementsByTagName('head')[0].appendChild(GM_JQ);
GM_wait();
} else {
doJob();
}
}
loadJquery();
function doJob() {
if (typeof $j === 'undefined') {
$j = $;
}
var url_arr = [
{'name': "baidu", 'value': "www.baidu.com"},
{'name': "baike", 'value': "baike.baidu.com"},
{'name': "zhidao", 'value': "zhidao.baidu.com"},
{'name': "weather", 'value': "http://www.weather.com.cn"},
];
var url = location.href;
var siteObj = {};
$j(url_arr).each(function (i, item) {
if (url.indexOf(item.value) > -1) {
siteObj = item;
return false;
}
});
var delay_arr = [];
var timerCount = 1;
function hideTimer() {
timerCount++;
if (timerCount > 20) {
return;
}
delay_arr = $j.grep(delay_arr, function (_selector, i) {
var $ele = $j(_selector);
var visible = $ele.is(':visible');
console.log($ele, visible);
if (visible) {
$ele.hide();
return false;
}
return true; // keep the element in the array
});
if (delay_arr.length > 0) {
setTimeout(hideTimer, 500);
}
}
setTimeout(hideTimer, 500);
var $frms;
switch (siteObj.name) {
case 'baidu':
$j('#content_right').hide();
break;
case 'baike':
$j('.topA, .lemmaWgt-promotion-slide, .union-content, .right-ad, .lemmaWgt-promotion-vbaike, .nav-menu').hide();
delay_arr.Push('#side_box_unionAd');
break;
case 'zhidao':
$j('.widget-new-graphic, #union-asplu, .jump-top-box').hide();
delay_arr.Push('.wgt-daily');
delay_arr.Push('.shop-entrance');
delay_arr.Push('.cms-slide');
delay_arr.Push('.nav-menu');
$frms = $j('iframe');
$frms.hide();
break;
case 'weather':
$j('.right, .hdImgs, .tq_zx, #di_tan, #zu_dui').hide();
//delay_arr.Push('.wgt-daily');
$frms = $j('iframe');
$frms.hide();
break;
}
}
})();
私のスクリプトはさまざまなサイトで機能する必要がありますが、jqueryが含まれているものと含まれていないものがあるため、テストする必要があります。 「必須」の方法はここでは機能しません。