0

我在創建一個工具時遇到了問題,該工具通過一個代碼生成插件在頁面上提供自定義覆蓋,一旦用戶點擊外部網站上的書籤。bookmarklet中的jQuery.getScript()繼續回調,但不能成功執行插件

當在小書籤內部調用$.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()或我的插件結構。如果我知道這可能是一個基於方法的問題,那麼這會縮小我的搜索範圍,並允許潛在地重寫某些函數。

在此先感謝,

克雷格Domville。

回答

0

我只是想澄清這種方法有什麼缺陷,或者如果我的AJAX請求中有任何明顯的錯誤,我使用getScript()或我的插件結構。

我沒有看到你的基本方法沒有錯。

需要考慮的一些事項:在使用$.generator(...)之前,請添加console.log($.generator)並查看它是否返回您期望的功能代碼。不要以爲只是因爲getScript回調觸發,該腳本才能正確執行。你似乎認爲$ == jQuery;也許這是一個安全的假設,也許不是。

+0

在合適的地方用jQuery代替$以消除混淆(包括在插件中)。看來插件沒有加載,因爲console.log顯示它爲'undefined'。感謝您的光臨。現在要弄清楚爲什麼它沒有加載。 –