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