Javascript 如何从jquery插件中包含的脚本触发onload?

Javascript 如何从jquery插件中包含的脚本触发onload?,javascript,jquery,plugins,onload,Javascript,Jquery,Plugins,Onload,我正在写一个jquery插件。我有一个为LivePerson.com动态添加的脚本标记。脚本一旦加载,就应该触发配置中定义的onLoad函数。然而,这永远不会开火。我很好奇这是否是时间上的问题,因为插件是在docready上启动的,脚本是在窗口加载时添加的?有什么想法吗 jQuery(function(){ jQuery(document).easyChat({ popup: false, siteId:'XXXXXXXXX', appKey: 'XXXXXXXXX' }

我正在写一个jquery插件。我有一个为LivePerson.com动态添加的脚本标记。脚本一旦加载,就应该触发配置中定义的onLoad函数。然而,这永远不会开火。我很好奇这是否是时间上的问题,因为插件是在docready上启动的,脚本是在窗口加载时添加的?有什么想法吗

jQuery(function(){
jQuery(document).easyChat({
    popup: false,
    siteId:'XXXXXXXXX',
    appKey: 'XXXXXXXXX'
});
});
插件脚本:

;(function($, document, window, undefined) {
// Optional, but considered best practice by some
"use strict";

// Name the plugin so it's only in one place
var pluginName = 'easyChat';
var lpc;

// Default options for the plugin as a simple object
var defaults = {
    popup : true,
    skill: 'Test'
};

// Plugin constructor
// This is the boilerplate to set up the plugin to keep our actual logic in one place
function Plugin(element, options) {
    this.element = element;

    // Merge the options given by the user with the defaults
    this.options = $.extend({}, defaults, options)

    // Initialization code to get the ball rolling
    // If your plugin is simple, this may not be necessary and
    // you could place your implementation here
    if(this.options.popup != true){
        this.init();
    } else {
        this.popup();
    }
}

Plugin.prototype = {
    // Public functions accessible to users
    // Prototype methods are shared across all elements
    // You have access to this.options and this.element

    popup:function(){
        console.log("popup");
    },

    DoAChat:function(){
        lpc = new lpChat();
        lpc.chatAvailability(); 

        // alert('Before');
      //  lpc.requestChat();
        // alert('After');
        if(this.options.popup == true){

        } else {
        //  document.getElementById('status').innerHTML += ' Done!';
        }
    },

    myOnLoad:function() {
         console.log("LP JS API Initiated");
        this.DoAChat();
    },

    myOnInit:function() {

    },

    myOnStart:function() {

    },

    myOnStop:function() {

    },

    myOnState:function() {

    },

    myOnTyping:function() {

    },

    myOnPush:function() {

    },

    myOnLine:function() {

    },

    myOnError:function() {

    },

    myOnAvailability:function(availObj) {
    console.log(availObj);
    },

    myOnResume:function() {

    },

    myOnAccountToAccountTransfer:function() {

    },

    //First Method triggered from plugin init
    init: function() {
       var lpChatConfig = {
        apiKey : this.options.appKey,lpNumber : this.options.siteId,  
        lpServer: 'dev.liveperson.net',
        onLoad : this.myOnLoad,  
        onInit : this.myOnInit,
        onStart : this.myOnStart,  
        onStop : this.myOnStop,
        onState : this.myOnState,  
        onAgentTyping : this.myOnTyping,
        onUrlPush : this.myOnPush,  
        onLine : this.myOnLine,
        onError : this.myOnError,  
        onAvailability: this.myOnAvailability,
        onResume : this.myOnResume,  
        onAccountToAccountTransfer: this.myOnAccountToAccountTransfer,
        skill: this.options.skill
        };

        lpChatConfig.lpAddScript = function(src, ignore) {var c = lpChatConfig;if(typeof(c.lpProtocol)=='undefined'){c.lpProtocol = (document.location.toString().indexOf("https:")==0) ? "https" : "http";}if (typeof(src) == 'undefined' || typeof(src) == 'object') {src = c.lpChatSrc ? c.lpChatSrc : '/hcp/html/lpChatAPI.js';};if (src.indexOf('http') != 0) {src = c.lpProtocol + "://" + c.lpServer + src + '?site=' + c.lpNumber;} else {if (src.indexOf('site=') < 0) {if (src.indexOf('?') < 0)src = src + '?'; else src = src + '&';src = src + 'site=' + c.lpNumber;}};var s = document.createElement('script');s.setAttribute('type', 'text/javascript');s.setAttribute('charset', 'iso-8859-1');s.setAttribute('src', src);document.getElementsByTagName('head').item(0).appendChild(s);}
if (window.attachEvent) window.attachEvent('onload', lpChatConfig.lpAddScript);
else window.addEventListener('load', lpChatConfig.lpAddScript, false);





    }



};

$.fn[pluginName] = function(options) {
    // Iterate through each DOM element and return it
    return this.each(function() {
        // prevent multiple instantiations
        if (!$.data(this, 'plugin_' + pluginName)) {
            $.data(this, 'plugin_' + pluginName, new Plugin(this, options));
        }
    });
};

// Private function that is only called by the plugin
var privateFunction = function() {
    // ...
}

})(jQuery, document, window);
;(函数($,文档,窗口,未定义){
//可选,但有些人认为是最佳实践
“严格使用”;
//命名插件,使其仅位于一个位置
var pluginName='easyChat';
var-lpc;
//插件作为简单对象的默认选项
var默认值={
是的,
技能:“测试”
};
//插件构造函数
//这是一个样板文件,用于设置插件以将实际逻辑保持在一个位置
函数插件(元素、选项){
this.element=元素;
//将用户提供的选项与默认值合并
this.options=$.extend({},默认值,选项)
//初始化代码,让球滚动
//如果你的插件很简单,这可能是不必要的
//您可以将实现放在这里
if(this.options.popup!=true){
this.init();
}否则{
这个.popup();
}
}
Plugin.prototype={
//用户可访问的公共功能
//原型方法在所有元素中共享
//您可以访问this.options和this.element
弹出:函数(){
控制台日志(“弹出窗口”);
},
DoAChat:function(){
lpc=新的lpChat();
lpc.chatAvailability();
//警惕(“之前”);
//lpc.requestChat();
//警报(“之后”);
if(this.options.popup==true){
}否则{
//document.getElementById('status').innerHTML+='Done!';
}
},
myOnLoad:function(){
log(“LP JS API已启动”);
这是DoAChat();
},
myOnInit:function(){
},
mynstart:function(){
},
myOnStop:function(){
},
mynstate:function(){
},
myOnTyping:function(){
},
myOnPush:function(){
},
myOnLine:function(){
},
myError:函数(){
},
myOnAvailability:功能(availObj){
console.log(availObj);
},
myOnResume:function(){
},
myOnAccountToAccountTransfer:函数(){
},
//从plugininit触发的第一个方法
init:function(){
变量lpChatConfig={
apiKey:this.options.appKey,lpNumber:this.options.siteId,
lpServer:'dev.liveperson.net',
加载:这个,我的加载,
奥尼尼特:这个,我的尼尼特,
onStart:this.myOnStart,
顶部:this.myOnStop,
onState:this.myOnState,
onAgentTyping:这是我的,
onUrlPush:this.myOnPush,
在线:this.myOnLine,
OneError:这是我的错误,
onAvailability:this.myonavaailability,
onResume:this.myOnResume,
onAccountToAccountTransfer:this.myOnAccountToAccountTransfer,
技能:这个。选项。技能
};
lpChatConfig.lpadscript=function(src,ignore){var c=lpChatConfig;if(typeof(c.lpProtocol)='undefined'){c.lpProtocol=(document.location.toString().indexOf(“https:”==0)?“https:“http”;}if(typeof(src)='undefined'| | typeof(src)='object src'{src=c.lpChatSrc?c.lpChatSrc:'/hcp/html/lpChatAPI.js};if(src.indexOf)('0')){src=c.lpProtocol+”:/“+c.lpServer+src+”?site='+c.lpNumber;}else{if(src.indexOf('site='))<0{if(src.indexOf('?')<0)src=src+'?';else src=src+'&';src=src+'site='+c.lpNumber;};var s=document.createElement('script');s.setAttribute('type','text/javascript');s.attribute('charset','s');iso-881-set59-setAttribute')('src',src);document.getElementsByTagName('head')。项(0)。appendChild;}
if(window.attachEvent)window.attachEvent('onload',lpChatConfig.lpAddScript);
else window.addEventListener('load',lpChatConfig.lpadscript,false);
}
};
$.fn[pluginName]=函数(选项){
//迭代每个DOM元素并返回它
返回此值。每个(函数(){
//防止多个实例化
if(!$.data(这是“plugin_u”+pluginName)){
$.data(这是'plugin_'+pluginName,新插件(这是选项));
}
});
};
//仅由插件调用的私有函数
var privateFunction=函数(){
// ...
}
})(jQuery、文档、窗口);

您是指您的
myOnLoad
函数没有被调用吗?我在引用的代码中没有看到调用myOnLoad的地方,只有它的定义和别名。您的
lpChatConfig
定义了一个
onLoad
属性,该属性是对
myOnLoad
的引用,但您也从不调用它。
ndow.attachEvent('onload',lpChatConfig.lpadscript)
将把执行附加到lpChatConfig.lpadscript的窗口onload事件。也许您想让lpChatConfig.lpadscript执行lpChatConfig.onload