0

ユーザーが外部サイトのブックマークレットをクリックすると、サーバーから取得されるコード生成プラグインを介してページにカスタム オーバーレイを提供するツールの作成に問題があります。

ブックマークレット内で呼び出すと$.getScript、ブックマークレットはスクリプトを正常に取得し、コールバック関数の実行を開始します。プラグイン自体にアクセスして HTML の生成を開始するまで、すべてが機能しています。ただし、プラグイン メソッドが呼び出されると、コンソールから何も受信できず、オーバーレイが表示されません。

プラグインの構造 (会社のプロジェクトであるため、メソッド自体のソースは省略されています - 残念ながら、私は知っていますが、悲しいことに必要です):

(function(jQuery){

    var methods = {
        generateHeader : function () {

        },
        generateItem : function(arguments) {

        },
        generateGridList : function(arguments) {

        },
        hideOverlay : function(){

        }
    }

    jQuery.fn.generator = function(method) {
        console.log("generator reached"); //Doesn't print.
        if(methods[method]){
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method[method] === 'object' || !method){
            return methods.init.apply(this, arguments);
        } else {
            $.error('Method ' + method + ' does not exist on jQuery.generator');
        }
    };

})( jQuery );

そして、私の関連するブックマークレットの内容:

$.getScript(<scriptURL>, function() {

    //generate data to send to server   

    //send unordered lists to server for processing
    $.ajax({
        requestType:'GET',
        url: <url>,
        dataType: 'jsonp',
        jsonp: 'callback',
        success: function(returnedData){
            //success param inside as data is required to proceed.
            $.each(returnedData.data, function(i, val){
                var htmlToAdd,
                content;

                console.log(val); //succeeeds, not null.

                htmlToAdd = $.generator('generateItem', val);

                console.log(htmlToAdd); //fails to reach log at this point

                //code to append to page
            });
        }
    });
});

すべてのメソッドは、$.css と $()、var.append() と var.html() 関数に基づいて HTML と CSS を生成し、いくつかの非表示/削除関数を使用して終了時にクリアします。

ここでは遅く (投稿の時点で午後 9 時 30 分近く)、集中力を失っているので、明日の朝オフィスに着いたときに方法を再確認します。このアプローチの落とし穴を明確にしたかっただけです。 AJAX リクエスト、getScript() の使用、またはプラグイン構造に明らかな誤りがある場合。メソッドベースの問題である可能性が高いことがわかっている場合は、検索を絞り込み、特定の関数を書き直す可能性があります。

前もって感謝します、

クレイグ・ドムヴィル。

4

1 に答える 1

0

このアプローチの落とし穴を明確にしたかっただけです。または、AJAX リクエスト、getScript() の使用、またはプラグイン構造に明らかな間違いがある場合は、.

あなたの基本的なアプローチには何の問題もありません。

考慮事項: を使用する前に$.generator(...)、 を追加console.log($.generator)して、期待する関数コードが返されるかどうかを確認してください。getScript コールバックが発生したからといって、そのスクリプトが適切に実行されたと思い込まないでください。$ == jQuery; と仮定しているようです。それは安全な仮定かもしれませんが、そうでないかもしれません。

于 2012-09-06T07:25:14.353 に答える