bookmarklet中的jQuery.getScript()进行回调,但没有成功执行插件

jQuery.getScript() in bookmarklet proceeds to callback, but does not execute plugin successfully

本文关键字:成功 插件 执行 回调 jQuery 中的 getScript bookmarklet      更新时间:2023-09-26

我在创建一个工具时遇到了一个问题,该工具通过代码生成插件在页面上提供自定义覆盖,一旦用户单击外部网站上的bookmarklet,就会从服务器上获取该插件。

在bookmarklet内部调用$.getScript时,bookmarklet成功获取脚本并开始执行回调函数。一切都在工作,直到我开始访问插件本身,开始生成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()的使用或插件结构中有任何明显的错误。如果我知道这可能是一个基于方法的问题,那就缩小了我的搜索范围,并允许对某些函数进行潜在的重写。

提前感谢

克雷格·多姆维尔。

我只是想澄清一下这种方法存在的任何陷阱,或者如果我在AJAX请求、getScript()的使用或插件结构中有任何明显的错误。

我认为你的基本方法没有错。

需要考虑的一些事项:在使用$.generator(...)之前,添加console.log($.generator),看看它是否返回您期望的函数代码。不要因为getScript回调被触发就认为该脚本执行正确。您似乎认为$==jQuery;也许这是一个安全的假设,也许不是。