ユーザーが外部サイトのブックマークレットをクリックすると、サーバーから取得されるコード生成プラグインを介してページにカスタム オーバーレイを提供するツールの作成に問題があります。
ブックマークレット内で呼び出すと$.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() の使用、またはプラグイン構造に明らかな誤りがある場合。メソッドベースの問題である可能性が高いことがわかっている場合は、検索を絞り込み、特定の関数を書き直す可能性があります。
前もって感謝します、
クレイグ・ドムヴィル。