1

毎日使っているウェブサイトにいくつかの機能を追加してみました。特定のリンクをクリックすると一部の要素を削除する関数を追加したいと思います。そこで、Tampermonkeyを使用して、次のコードをテストしようとしました。

function removeSth(){

    $('a').click(function(){
        alert ("warning");
        return false;
    });
}
removeSth();

悲しいことに、それは機能しません。これはそれが言うことです:

ReferenceError:$が定義されていません

at removeUsers(eval at(eval at eventHandler(eval at <anonymous> (chrome-extension://dhdgffkkebhmkfjojejmpbldmpobfkfo/content.js:56:21)))、 <anonymous>:65:5)

正直なところ、これらが何を意味するのかわかりません。

4

3 に答える 3

2

ユーザースクリプトとほとんどのGreasemonkeyスクリプトは、サンドボックスで動作します。したがって、スクリプトはjQuery($コードが使用しているオブジェクト)自体をロードするか、ターゲットページのバージョンのjQueryを使用するためにコードを挿入する必要があります。

クロスブラウザスクリプトでjQueryを使用する最良の方法は、この驚くほど優れたメソッドを使用することです。(^ _ ^)

したがって、スクリプトは次のようになります。

// ==UserScript==
// @name     _Mouse-click detect
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @grant    GM_info
// ==/UserScript==

function GM_main ($) {
    function removeSth () {
        $('a').click (function () {
            alert ("warning");
            return false;
        } );
    }
    removeSth ();
}

if (typeof GM_info !== "undefined") {
    GM_main ($);
}
else {
    add_jQuery (GM_main);
}

function add_jQuery (callbackFn, jqVersion) {
    var jqVersion   = jqVersion || "1.7.2";
    var D           = document;
    var targ        = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
    var scriptNode  = D.createElement ('script');
    scriptNode.src  = 'http://ajax.googleapis.com/ajax/libs/jquery/'
                    + jqVersion
                    + '/jquery.min.js'
                    ;
    scriptNode.addEventListener ("load", function () {
        var scriptNode          = D.createElement ("script");
        scriptNode.textContent  =
            'var gm_jQuery  = jQuery.noConflict (true);\n'
            + '(' + callbackFn.toString () + ')(gm_jQuery);'
        ;
        targ.appendChild (scriptNode);
    }, false);
    targ.appendChild (scriptNode);
}




ただし、 Firefox-GreasemonkeyとTampermonkeyの場合は、スクリプトを次のように簡略化できます。

// ==UserScript==
// @name     _Mouse-click detect
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @grant    GM_info
// ==/UserScript==

function removeSth () {
    $('a').click (function () {
        alert ("warning");
        return false;
    } );
}
removeSth ();
于 2012-10-10T08:47:50.110 に答える
0

サイトにすでにjQueryが含まれている場合は、別のjqueryライブラリをロードする理由を以下のように使用します。また、多くのサイトで問題が発生しているので、$よりもjqを使用しています。これは、安全である方が良いのですが、これもオプションです。

    // ==UserScript==
    // @name           jquery usage
    // @namespace      zevy_boy
    // @include        http://www.wwe.com/*
    // ==/UserScript==

    function jqx(){
    jq=jQuery;
    //todo
    }



    var head= document.body;
    var script= document.createElement('script');
    script.type= 'text/javascript';
    script.text= jqx.toString()+"jhqx();";
    head.appendChild(script);
于 2012-10-10T09:14:09.503 に答える
0

ユーザースクリプトにjQueryを含める必要があります。userscripts.com@requireには、利用可能な jQuery のユーザー スクリプト バージョンが多数あります。

単純にクリックを検出するためですが、使用するaddEventListener方がはるかに軽量です。

ところで: エラー メッセージの読み方を学ぶ必要があります。

ReferenceError: $ is not defined

あなたが知る必要があるすべてを教えてくれます。

于 2012-10-10T08:17:13.153 に答える