swfupload too much recursion

今天在使用swfupload.js(版本号:2.2.0.1)这个js和flash的文件上传插件的时候,出现了一个bug,也就是我们常说的栈溢出,内存溢出。

swfupload too much recursion,这算对js的一个提高,过程是这样的,当用户在上传文件的时候,还有文件没有上传成功,用户选择了取消,

于是需要调用swf_upload.cancelUpload(fileId);结果就出现了内存溢出。可惜我还是没有能够找到问题所在。等有空的时候,研究下具体的问题所在。目前是

采用了最老土的方法,location.reload(true);,这样对我的理解深入js没有帮助。效果图:




代码如下:

var swf_upload = new SWFUpload({
		// options
		flash_url:              '/scripts/preview-tool/swfupload.swf',
		flash9_url : 			'/scripts/swfupload_fp9.swf',
		upload_url:             '/ajax/upload.php',
		post_params:            {'cart_cookie': '<?= @$_COOKIE['cart_id'] ?>', 'session_id':'<?= session_id() ?>', 'item_id':'<?=$item_id?>', 'tab':'<?=$side?>'},
		file_types:             '*.jpg;*.jpeg;',
		file_types_description: 'Image Files',
		file_size_limit:        '10000',//10M
		file_queue_limit:       0,
		button_placeholder_id:  'btn-swf-select',
		button_image_url:       '/images/btn_file_select.gif',		//the "select: button
		button_width:           106,
		button_height:          39,
		button_cursor:          SWFUpload.CURSOR.HAND,
		button_window_mode:     SWFUpload.WINDOW_MODE.TRANSPARENT,
		debug:                  false,
		
		file_queued_handler: function(file) {
			new QueueFile(file);
		},
		file_queue_error_handler: function(file, code, msg) {
			var item = new QueueFile(file);
			(this.getStats().files_queued) || item.reset();
			
			with (SWFUpload.QUEUE_ERROR) {
				switch (code) {
					case FILE_EXCEEDS_SIZE_LIMIT:
						msg = 'The file is too big.';
						break;
					case ZERO_BYTE_FILE:
						msg = 'The file is empty.';
						break;
					case INVALID_FILETYPE:
						msg = 'The file type is invalid.';
						break;
				}
			}
			
			item.setError(msg);
		},
		file_dialog_complete_handler: function(selected, queued) {
			if (queued > 0) {
				this.startUpload();
			}
		},
		upload_start_handler: function(file) {
			var stats = this.getStats();
				
			queued_files[file.index].reset();
			$('#footer-text').html(stats.files_queued + ' file(s) remaining, please wait…');
		},
		upload_progress_handler: function(file, b_complete, b_total) {
			queued_files[file.index].setProgress(b_complete, b_total);
		},
		upload_error_handler: function(file, code, msg) {
			with (SWFUpload.UPLOAD_ERROR) {
				switch (code) {
					case HTTP_ERROR:
					case IO_ERROR:
						msg = 'IO error happen when upload file.';
				break;
					case FILE_CANCELLED:
						msg = 'File upload is cancelled';
						break;
				}
			}
			queued_files[file.index].setError(msg);
		},
		upload_success_handler: function(file, data) {
			// For canvas world we just need the filename of the most recently uploaded image
			if(typeof(jQuery) == 'function'){
		   		 var json = jQuery.parseJSON(data);
				 photoFileName = json.fname;
			}
			data = eval('(' + data + ')');
			if (data.error) {
				var stats = this.getStats();
				stats.upload_errors++;
				stats.successful_uploads--;
				this.setStats(stats);
				queued_files[file.index].setError(data.msg);
			} else {
				queued_files[file.index].setComplete(data);
				var $PHOTO_OFFSET_Y = 50;
				var $h = 45;
				var $top_level = $prev_top = $h + 10;
				var $photosHeight = $prev_top + $PHOTO_OFFSET_Y;
				if ($("#insert .photoPage").length != 0) {
					var newId = parseInt($("#insert").find("img").length / 2);
				} else {
					var newId = 0;
				}
				var $aspect = data.width / data.height; 
				if($aspect > 1) { 
					var $w = 50; 
					var $h = Math.round(50/$aspect, 0); 
				} else { 
					var $h = 50; 
					var $w = 50*$aspect; 
				}
				
				
				if (newId % 10 == 0) {
					var $top = $top_level;
				} else {
					var $top = $prev_top;
				}

				var $bottom   = $prev_top; 
				var $horz_offset  = Math.round((50-$w)/2);
				var $midline  = -105;
				var $left	  = 0;
				if(newId % 2 == 0) {	//left odd number
					$photosHeight = Math.max($photosHeight, $prev_top + 50 + 42 + 50);
				 	$left 	  = $midline - 40;
					$column = 2;
					$prev_top = $top;
				} else {				//right even number
					$left = $midline + 40;
					$prev_top = 50 + 42;
					$column = 1;
					$photosHeight = Math.max($photosHeight, $prev_top + 50);
				}
				
				var htmlDom = [];
				var imgDom  = [];
				var comDom	= [];
				var hGap	= 92;
				if ($("#drag").is(":visible") || newId == 0) {
					var $top	= parseInt((newId % 10) / 2) * hGap + $top;  
				} else {
					var $top	= parseInt((newId % 10) / 2) * hGap == 0 ? 10 : parseInt((newId % 10) / 2) * hGap;  
				}
				var idHtml	= '<div class="photoPage" id="photoPage' + newId + '">';	//used to distinct the display: none; or block
				var imgId	= "photo" + newId;

				
				
				comDom.push('<img id="' + imgId + '" src="', $pic_path, data.fname + '"',
						'style="position:absolute; top:', $top, 'px; left:', ($left + $horz_offset), 
						'px; width:', $w, 'px; height:', $h, 'px; border:1px solid silver; ">',
						'<div style="position:absolute; top:', Math.round($top+$h+1), 'px; left:', 
						($left - 25), 'px; width:100px; text-align:center;">',
						'<span style="font-size:9px;">', data.fsize, '</span><br>',
						'<a href="javascript:confirmDeletephoto(\'', imgId, "','", 
						data.fname, "','", $side, "','", $item_id, "','", $is_admin, "','", size, "','", design_id, "','", PHOTO_DIR, "')\">", 
						'<img src="/images/delete_icon.gif">delete</a></div>');
				
				var comHtml = comDom.join('');
				//console.log(comHtml); return;
				if (newId == 0) {				//The first image
					htmlDom.push($dragHtml, idHtml, comHtml);
					$("#insert").html(htmlDom.join(''));
				} else if (newId % 10 == 0) {	//need to generator a new page
					var nextPageArr = [];
					var prevPageArr = [];
					$("#zeroMarker").height('505px');
					var hiddenHtml	= '<div class="photoPage" id="photoPage' + newId + '" style="display: none;">';
					if (newId == 10) {		//no previous page
						//htmlDom.push(idHtml, comHtml);
						nextPageArr.push('<div style="position:absolute; top:515px; left:', $midline + 26, 'px; width: 150px; ">',
									parseInt(newId / 10), '<a href="#', newId, '" οnclick="return changePhotoPage(', newId, ');">next ></a>',
									'</div>');
						$("#insert .photoPage").last().append(nextPageArr.join(''));			
						
						prevPageArr.push('<div style="position:absolute; top:515px; left:', ($midline -40), 'px; width: 150px; ">',
										'<a href="#', parseInt(newId / 10) - 1, '" οnclick="return changePhotoPage(', parseInt(newId / 10) - 1, ');">< previous</a>',
										parseInt(newId / 10) + 1), '</div></div>';
						$("#insert").append(hiddenHtml + comHtml + prevPageArr.join(''));
						//console.log('$("#insert=' + $("#insert").html());// + 'nextPageArr=' + nextPageArr.join('') + 'prevPageArr=' + prevPageArr.join(''));
					} else {				//exists privious and next page
						var nextLink = '<a οnclick="return changePhotoPage(' + newId + ');" href="#' + newId + '">next ></a>';
						$("#insert .photoPage").last().find("div").last().append(nextLink);
						var prevHtml = '<div style="position: absolute; top: 515px; left: -145px; width: 150px;">' + 
										 '<a οnclick="return changePhotoPage(' + (newId - 10) + ');" href="#' + (newId - 10) + '">' + 
										'< previous</a>' + (parseInt(newId / 10) + 1) + '</div></div>';
						htmlDom.push(hiddenHtml, comHtml, prevHtml);
						$("#insert").append(htmlDom.join(''));
						//console.log(htmlDom.join(''));				
					}
				} else {
					if (newId < 10) {
						$("#insert .photoPage").last().append(comHtml);
					} else {
						$("#insert").find("div").last().before(comHtml);
					}
				}
				var dragUploadIndex = "dragUpload" + newId;
				var dragUploadIndex = DragHandler.attach(document.getElementById(imgId));
				dragUploadIndex.dragBegin = dragUploadStart;
				dragUploadIndex.drag = dragUpload;
				dragUploadIndex.dragEnd = dragUploadEnd;
				dragUploadIndex.isAdmin = '<?= $is_admin?>';
			}
		},
		upload_complete_handler: function(file) {
			var stats = this.getStats();
			if (stats.files_queued > 0) {
				this.startUpload();
			} else {
				var errors = stats.upload_errors + stats.queue_errors;
				$('#footer-text').html(stats.successful_uploads + ' file(s) successfully uploaded.' + ((errors) ? ' <strong>' + errors + ' errors</strong>.' : ''));
			}
		}
	});


/**
 * QueueFile class
 * handles showing file status in queue
 * last modified 2009-01-19 Derek Nicol
 */

// check for jquery
if (typeof(jQuery) == 'undefined') {
	throw('Unable to load QueueFile class, jQuery library not found');
}

// globals
if (typeof(queued_files) == 'undefined') { var queued_files = []; }

// constructor
function QueueFile(file) {
	// validate
	if (typeof(file) != 'object') { return false; }
	
	// vars
	this.file  = file;
	this.index = file.index;
	this.id    = 'file-li-' + this.index;
	
	// create display
	$('#upload-queue').append(
		'<li id="' + this.id + '">' +
			'<div class="preview-container"><img src="/images/blank.png" width="30" height="30" alt="" border="0" class="preview" /></div>' +
			'<span class="title">' + this.file.name + '  <span class="small">' + (this.file.size / 1024 / 1024).toFixed(2) + ' mb</span></span>' +
			'<a href="#" class="cancel" οnclick="swf_upload.cancelUpload(\'' + file.id + '\'); return false;">cancel</a><span class="status">queued</span><br />' +
			'<span class="error-details"></span>' +
			'<div class="progress-bar">' +
				'<span class="progress"></span>' +
			'</div>' +
		'</li>'
	);
	this.li            = $('#' + this.id).eq(0);
	this.progress_bar  = $('.progress-bar', this.li).eq(0);
	this.progress      = $('.progress', this.progress_bar).eq(0);
	this.status        = $('.status', this.li).eq(0);
	this.preview       = $('.preview', this.li).eq(0);
	this.error_details = $('.error-details', this.li).eq(0);
	this.cancel        = $('.cancel', this.li).eq(0);
	
	this.li.data('object', this);
	queued_files[this.index] = this;
}

// methods
with (QueueFile) {
	// general cleanup
	prototype.reset = function() {
		var parent = $('#upload-queue');
		$('#upload-queue').animate({ scrollTop: this.li.offset().top - parent.offset().top + parent.scrollTop() }, 'slow');
		this.status
			.removeClass('error')
			.html('starting…')
		;
		
		this.cancel.show();
		this.li.addClass('processing');
	}
	
	// update progress bar
	prototype.setProgress = function(complete, total) {
		// calculate progress bar width
		var p = complete / total;
		var width = Math.round((this.progress_bar.width() - 2) * p * 0.9);
		
		// update
		this.progress.width(width);
		this.status.html((p == 1)
			? 'uploading…  ' + (p * 90).toFixed(1) + '%'//'processing your photo…'
			: 'uploading…  ' + (p * 90).toFixed(1) + '%'
		);
	}
	
	// upload complete
	prototype.setComplete = function(data) {
		this.status.text('upload successful');
		
		// scale
		if (data.height >= data.width) {
			this.preview.width(Math.round((data.width / data.height) * this.preview.height()))
		} else {
			this.preview.height(Math.round((data.height / data.width) * this.preview.width()));
		}
		this.preview.attr('src', data.photopath + '/' + data.fname);
		
		// set status
		var warning = false;
		if (data.width < 400 && data.height < 400) {
			warning = true;
		}
		this.error_details
			.text((warning)
				? 'low resolution image - not recommended for printing'
				: 'Dimensions: ' + data.width + ' x ' + data.height + ' pixels'
			)
			.show()
		;
		this.li
			.removeClass('processing')
			.addClass((warning) ? 'warning' : 'successful')
		;
		
		this.cancel.hide();
		this.progress_bar.hide();
		if(window.GLOBALS && GLOBALS.closeAfterComplete) {
			$('.ui-button.ui-widget.ui-state-default.ui-corner-all.ui-button-text-only').trigger('click');
		}
		
	}
	
	// set error
	prototype.setError = function(msg) {
		this.status.text('upload unsuccessful');
		this.error_details
			.html(msg)
			.css('display', 'block')
		;
		
		this.li
			.removeClass('processing')
			.addClass('error')
		;
		this.cancel.hide();
		this.progress_bar.hide();
	}
}


/**
 * SWFUpload class (minified)
 * version 2.2.0.1
 * http://swfupload.org
 */
var SWFUpload;if(SWFUpload==undefined){SWFUpload=function(a){this.initSWFUpload(a)}}SWFUpload.prototype.initSWFUpload=function(b){try{this.customSettings={};this.settings=b;this.eventQueue=[];this.movieName="SWFUpload_"+SWFUpload.movieCount++;this.movieElement=null;SWFUpload.instances[this.movieName]=this;this.initSettings();this.loadFlash();this.displayDebugInfo()}catch(a){delete SWFUpload.instances[this.movieName];throw a}};SWFUpload.instances={};SWFUpload.movieCount=0;SWFUpload.version="2.2.0 2009-03-25";SWFUpload.QUEUE_ERROR={QUEUE_LIMIT_EXCEEDED:-100,FILE_EXCEEDS_SIZE_LIMIT:-110,ZERO_BYTE_FILE:-120,INVALID_FILETYPE:-130};SWFUpload.UPLOAD_ERROR={HTTP_ERROR:-200,MISSING_UPLOAD_URL:-210,IO_ERROR:-220,SECURITY_ERROR:-230,UPLOAD_LIMIT_EXCEEDED:-240,UPLOAD_FAILED:-250,SPECIFIED_FILE_ID_NOT_FOUND:-260,FILE_VALIDATION_FAILED:-270,FILE_CANCELLED:-280,UPLOAD_STOPPED:-290};SWFUpload.FILE_STATUS={QUEUED:-1,IN_PROGRESS:-2,ERROR:-3,COMPLETE:-4,CANCELLED:-5};SWFUpload.BUTTON_ACTION={SELECT_FILE:-100,SELECT_FILES:-110,START_UPLOAD:-120};SWFUpload.CURSOR={ARROW:-1,HAND:-2};SWFUpload.WINDOW_MODE={WINDOW:"window",TRANSPARENT:"transparent",OPAQUE:"opaque"};SWFUpload.completeURL=function(a){if(typeof(a)!=="string"||a.match(/^https?:\/\//i)||a.match(/^\//)){return a}var c=window.location.protocol+"//"+window.location.hostname+(window.location.port?":"+window.location.port:"");var b=window.location.pathname.lastIndexOf("/");if(b<=0){path="/"}else{path=window.location.pathname.substr(0,b)+"/"}return path+a};SWFUpload.prototype.initSettings=function(){this.ensureDefault=function(b,a){this.settings[b]=(this.settings[b]==undefined)?a:this.settings[b]};this.ensureDefault("upload_url","");this.ensureDefault("preserve_relative_urls",false);this.ensureDefault("file_post_name","Filedata");this.ensureDefault("post_params",{});this.ensureDefault("use_query_string",false);this.ensureDefault("requeue_on_error",false);this.ensureDefault("http_success",[]);this.ensureDefault("assume_success_timeout",0);this.ensureDefault("file_types","*.*");this.ensureDefault("file_types_description","All Files");this.ensureDefault("file_size_limit",0);this.ensureDefault("file_upload_limit",0);this.ensureDefault("file_queue_limit",0);this.ensureDefault("flash_url","swfupload.swf");this.ensureDefault("prevent_swf_caching",true);this.ensureDefault("button_image_url","");this.ensureDefault("button_width",1);this.ensureDefault("button_height",1);this.ensureDefault("button_text","");this.ensureDefault("button_text_style","color: #000000; font-size: 16pt;");this.ensureDefault("button_text_top_padding",0);this.ensureDefault("button_text_left_padding",0);this.ensureDefault("button_action",SWFUpload.BUTTON_ACTION.SELECT_FILES);this.ensureDefault("button_disabled",false);this.ensureDefault("button_placeholder_id","");this.ensureDefault("button_placeholder",null);this.ensureDefault("button_cursor",SWFUpload.CURSOR.ARROW);this.ensureDefault("button_window_mode",SWFUpload.WINDOW_MODE.WINDOW);this.ensureDefault("debug",false);this.settings.debug_enabled=this.settings.debug;this.settings.return_upload_start_handler=this.returnUploadStart;this.ensureDefault("swfupload_loaded_handler",null);this.ensureDefault("file_dialog_start_handler",null);this.ensureDefault("file_queued_handler",null);this.ensureDefault("file_queue_error_handler",null);this.ensureDefault("file_dialog_complete_handler",null);this.ensureDefault("upload_start_handler",null);this.ensureDefault("upload_progress_handler",null);this.ensureDefault("upload_error_handler",null);this.ensureDefault("upload_success_handler",null);this.ensureDefault("upload_complete_handler",null);this.ensureDefault("debug_handler",this.debugMessage);this.ensureDefault("custom_settings",{});this.customSettings=this.settings.custom_settings;if(!!this.settings.prevent_swf_caching){this.settings.flash_url=this.settings.flash_url+(this.settings.flash_url.indexOf("?")<0?"?":"&")+"preventswfcaching="+new Date().getTime()}if(!this.settings.preserve_relative_urls){this.settings.upload_url=SWFUpload.completeURL(this.settings.upload_url);this.settings.button_image_url=SWFUpload.completeURL(this.settings.button_image_url)}delete this.ensureDefault};SWFUpload.prototype.loadFlash=function(){var a,b;if(document.getElementById(this.movieName)!==null){throw"ID "+this.movieName+" is already in use. The Flash Object could not be added"}a=document.getElementById(this.settings.button_placeholder_id)||this.settings.button_placeholder;if(a==undefined){throw"Could not find the placeholder element: "+this.settings.button_placeholder_id}b=document.createElement("div");b.innerHTML=this.getFlashHTML();a.parentNode.replaceChild(b.firstChild,a);if(window[this.movieName]==undefined){window[this.movieName]=this.getMovieElement()}};SWFUpload.prototype.getFlashHTML=function(){return['<object id="',this.movieName,'" type="application/x-shockwave-flash" data="',this.settings.flash_url,'" width="',this.settings.button_width,'" height="',this.settings.button_height,'" class="swfupload">','<param name="wmode" value="',this.settings.button_window_mode,'" />','<param name="movie" value="',this.settings.flash_url,'" />','<param name="quality" value="high" />','<param name="menu" value="false" />','<param name="allowScriptAccess" value="always" />','<param name="flashvars" value="'+this.getFlashVars()+'" />',"</object>"].join("")};SWFUpload.prototype.getFlashVars=function(){var b=this.buildParamString();var a=this.settings.http_success.join(",");return["movieName=",encodeURIComponent(this.movieName),"&uploadURL=",encodeURIComponent(this.settings.upload_url),"&useQueryString=",encodeURIComponent(this.settings.use_query_string),"&requeueOnError=",encodeURIComponent(this.settings.requeue_on_error),"&httpSuccess=",encodeURIComponent(a),"&assumeSuccessTimeout=",encodeURIComponent(this.settings.assume_success_timeout),"&params=",encodeURIComponent(b),"&filePostName=",encodeURIComponent(this.settings.file_post_name),"&fileTypes=",encodeURIComponent(this.settings.file_types),"&fileTypesDescription=",encodeURIComponent(this.settings.file_types_description),"&fileSizeLimit=",encodeURIComponent(this.settings.file_size_limit),"&fileUploadLimit=",encodeURIComponent(this.settings.file_upload_limit),"&fileQueueLimit=",encodeURIComponent(this.settings.file_queue_limit),"&debugEnabled=",encodeURIComponent(this.settings.debug_enabled),"&buttonImageURL=",encodeURIComponent(this.settings.button_image_url),"&buttonWidth=",encodeURIComponent(this.settings.button_width),"&buttonHeight=",encodeURIComponent(this.settings.button_height),"&buttonText=",encodeURIComponent(this.settings.button_text),"&buttonTextTopPadding=",encodeURIComponent(this.settings.button_text_top_padding),"&buttonTextLeftPadding=",encodeURIComponent(this.settings.button_text_left_padding),"&buttonTextStyle=",encodeURIComponent(this.settings.button_text_style),"&buttonAction=",encodeURIComponent(this.settings.button_action),"&buttonDisabled=",encodeURIComponent(this.settings.button_disabled),"&buttonCursor=",encodeURIComponent(this.settings.button_cursor)].join("")};SWFUpload.prototype.getMovieElement=function(){if(this.movieElement==undefined){this.movieElement=document.getElementById(this.movieName)}if(this.movieElement===null){throw"Could not find Flash element"}return this.movieElement};SWFUpload.prototype.buildParamString=function(){var c=this.settings.post_params;var b=[];if(typeof(c)==="object"){for(var a in c){if(c.hasOwnProperty(a)){b.push(encodeURIComponent(a.toString())+"="+encodeURIComponent(c[a].toString()))}}}return b.join("&")};SWFUpload.prototype.destroy=function(){try{this.cancelUpload(null,false);var a=null;a=this.getMovieElement();if(a&&typeof(a.CallFunction)==="unknown"){for(var c in a){try{if(typeof(a[c])==="function"){a[c]=null}}catch(e){}}try{a.parentNode.removeChild(a)}catch(b){}}window[this.movieName]=null;SWFUpload.instances[this.movieName]=null;delete SWFUpload.instances[this.movieName];this.movieElement=null;this.settings=null;this.customSettings=null;this.eventQueue=null;this.movieName=null;return true}catch(d){return false}};SWFUpload.prototype.displayDebugInfo=function(){this.debug(["---SWFUpload Instance Info---\n","Version: ",SWFUpload.version,"\n","Movie Name: ",this.movieName,"\n","Settings:\n","\t","upload_url:               ",this.settings.upload_url,"\n","\t","flash_url:                ",this.settings.flash_url,"\n","\t","use_query_string:         ",this.settings.use_query_string.toString(),"\n","\t","requeue_on_error:         ",this.settings.requeue_on_error.toString(),"\n","\t","http_success:             ",this.settings.http_success.join(", "),"\n","\t","assume_success_timeout:   ",this.settings.assume_success_timeout,"\n","\t","file_post_name:           ",this.settings.file_post_name,"\n","\t","post_params:              ",this.settings.post_params.toString(),"\n","\t","file_types:               ",this.settings.file_types,"\n","\t","file_types_description:   ",this.settings.file_types_description,"\n","\t","file_size_limit:          ",this.settings.file_size_limit,"\n","\t","file_upload_limit:        ",this.settings.file_upload_limit,"\n","\t","file_queue_limit:         ",this.settings.file_queue_limit,"\n","\t","debug:                    ",this.settings.debug.toString(),"\n","\t","prevent_swf_caching:      ",this.settings.prevent_swf_caching.toString(),"\n","\t","button_placeholder_id:    ",this.settings.button_placeholder_id.toString(),"\n","\t","button_placeholder:       ",(this.settings.button_placeholder?"Set":"Not Set"),"\n","\t","button_image_url:         ",this.settings.button_image_url.toString(),"\n","\t","button_width:             ",this.settings.button_width.toString(),"\n","\t","button_height:            ",this.settings.button_height.toString(),"\n","\t","button_text:              ",this.settings.button_text.toString(),"\n","\t","button_text_style:        ",this.settings.button_text_style.toString(),"\n","\t","button_text_top_padding:  ",this.settings.button_text_top_padding.toString(),"\n","\t","button_text_left_padding: ",this.settings.button_text_left_padding.toString(),"\n","\t","button_action:            ",this.settings.button_action.toString(),"\n","\t","button_disabled:          ",this.settings.button_disabled.toString(),"\n","\t","custom_settings:          ",this.settings.custom_settings.toString(),"\n","Event Handlers:\n","\t","swfupload_loaded_handler assigned:  ",(typeof this.settings.swfupload_loaded_handler==="function").toString(),"\n","\t","file_dialog_start_handler assigned: ",(typeof this.settings.file_dialog_start_handler==="function").toString(),"\n","\t","file_queued_handler assigned:       ",(typeof this.settings.file_queued_handler==="function").toString(),"\n","\t","file_queue_error_handler assigned:  ",(typeof this.settings.file_queue_error_handler==="function").toString(),"\n","\t","upload_start_handler assigned:      ",(typeof this.settings.upload_start_handler==="function").toString(),"\n","\t","upload_progress_handler assigned:   ",(typeof this.settings.upload_progress_handler==="function").toString(),"\n","\t","upload_error_handler assigned:      ",(typeof this.settings.upload_error_handler==="function").toString(),"\n","\t","upload_success_handler assigned:    ",(typeof this.settings.upload_success_handler==="function").toString(),"\n","\t","upload_complete_handler assigned:   ",(typeof this.settings.upload_complete_handler==="function").toString(),"\n","\t","debug_handler assigned:             ",(typeof this.settings.debug_handler==="function").toString(),"\n"].join(""))};SWFUpload.prototype.addSetting=function(b,c,a){if(c==undefined){return(this.settings[b]=a)}else{return(this.settings[b]=c)}};SWFUpload.prototype.getSetting=function(a){if(this.settings[a]!=undefined){return this.settings[a]}return""};SWFUpload.prototype.callFlash=function(functionName,argumentArray){argumentArray=argumentArray||[];var movieElement=this.getMovieElement();var returnValue,returnString;try{returnString=movieElement.CallFunction('<invoke name="'+functionName+'" returntype="javascript">'+__flash__argumentsToXML(argumentArray,0)+"</invoke>");returnValue=eval(returnString)}catch(ex){throw"Call to "+functionName+" failed"}if(returnValue!=undefined&&typeof returnValue.post==="object"){returnValue=this.unescapeFilePostParams(returnValue)}return returnValue};SWFUpload.prototype.selectFile=function(){this.callFlash("SelectFile")};SWFUpload.prototype.selectFiles=function(){this.callFlash("SelectFiles")};SWFUpload.prototype.startUpload=function(a){this.callFlash("StartUpload",[a])};SWFUpload.prototype.cancelUpload=function(a,b){if(b!==false){b=true}this.callFlash("CancelUpload",[a,b])};SWFUpload.prototype.stopUpload=function(){this.callFlash("StopUpload")};SWFUpload.prototype.getStats=function(){return this.callFlash("GetStats")};SWFUpload.prototype.setStats=function(a){this.callFlash("SetStats",[a])};SWFUpload.prototype.getFile=function(a){if(typeof(a)==="number"){return this.callFlash("GetFileByIndex",[a])}else{return this.callFlash("GetFile",[a])}};SWFUpload.prototype.addFileParam=function(a,b,c){return this.callFlash("AddFileParam",[a,b,c])};SWFUpload.prototype.removeFileParam=function(a,b){this.callFlash("RemoveFileParam",[a,b])};SWFUpload.prototype.setUploadURL=function(a){this.settings.upload_url=a.toString();this.callFlash("SetUploadURL",[a])};SWFUpload.prototype.setPostParams=function(a){this.settings.post_params=a;this.callFlash("SetPostParams",[a])};SWFUpload.prototype.addPostParam=function(a,b){this.settings.post_params[a]=b;this.callFlash("SetPostParams",[this.settings.post_params])};SWFUpload.prototype.removePostParam=function(a){delete this.settings.post_params[a];this.callFlash("SetPostParams",[this.settings.post_params])};SWFUpload.prototype.setFileTypes=function(a,b){this.settings.file_types=a;this.settings.file_types_description=b;this.callFlash("SetFileTypes",[a,b])};SWFUpload.prototype.setFileSizeLimit=function(a){this.settings.file_size_limit=a;this.callFlash("SetFileSizeLimit",[a])};SWFUpload.prototype.setFileUploadLimit=function(a){this.settings.file_upload_limit=a;this.callFlash("SetFileUploadLimit",[a])};SWFUpload.prototype.setFileQueueLimit=function(a){this.settings.file_queue_limit=a;this.callFlash("SetFileQueueLimit",[a])};SWFUpload.prototype.setFilePostName=function(a){this.settings.file_post_name=a;this.callFlash("SetFilePostName",[a])};SWFUpload.prototype.setUseQueryString=function(a){this.settings.use_query_string=a;this.callFlash("SetUseQueryString",[a])};SWFUpload.prototype.setRequeueOnError=function(a){this.settings.requeue_on_error=a;this.callFlash("SetRequeueOnError",[a])};SWFUpload.prototype.setHTTPSuccess=function(a){if(typeof a==="string"){a=a.replace(" ","").split(",")}this.settings.http_success=a;this.callFlash("SetHTTPSuccess",[a])};SWFUpload.prototype.setAssumeSuccessTimeout=function(a){this.settings.assume_success_timeout=a;this.callFlash("SetAssumeSuccessTimeout",[a])};SWFUpload.prototype.setDebugEnabled=function(a){this.settings.debug_enabled=a;this.callFlash("SetDebugEnabled",[a])};SWFUpload.prototype.setButtonImageURL=function(a){if(a==undefined){a=""}this.settings.button_image_url=a;this.callFlash("SetButtonImageURL",[a])};SWFUpload.prototype.setButtonDimensions=function(c,a){this.settings.button_width=c;this.settings.button_height=a;var b=this.getMovieElement();if(b!=undefined){b.style.width=c+"px";b.style.height=a+"px"}this.callFlash("SetButtonDimensions",[c,a])};SWFUpload.prototype.setButtonText=function(a){this.settings.button_text=a;this.callFlash("SetButtonText",[a])};SWFUpload.prototype.setButtonTextPadding=function(b,a){this.settings.button_text_top_padding=a;this.settings.button_text_left_padding=b;this.callFlash("SetButtonTextPadding",[b,a])};SWFUpload.prototype.setButtonTextStyle=function(a){this.settings.button_text_style=a;this.callFlash("SetButtonTextStyle",[a])};SWFUpload.prototype.setButtonDisabled=function(a){this.settings.button_disabled=a;this.callFlash("SetButtonDisabled",[a])};SWFUpload.prototype.setButtonAction=function(a){this.settings.button_action=a;this.callFlash("SetButtonAction",[a])};SWFUpload.prototype.setButtonCursor=function(a){this.settings.button_cursor=a;this.callFlash("SetButtonCursor",[a])};SWFUpload.prototype.queueEvent=function(b,c){if(c==undefined){c=[]}else{if(!(c instanceof Array)){c=[c]}}var a=this;if(typeof this.settings[b]==="function"){this.eventQueue.push(function(){this.settings[b].apply(this,c)});setTimeout(function(){a.executeNextEvent()},0)}else{if(this.settings[b]!==null){throw"Event handler "+b+" is unknown or is not a function"}}};SWFUpload.prototype.executeNextEvent=function(){var a=this.eventQueue?this.eventQueue.shift():null;if(typeof(a)==="function"){a.apply(this)}};SWFUpload.prototype.unescapeFilePostParams=function(c){var e=/[$]([0-9a-f]{4})/i;var f={};var d;if(c!=undefined){for(var a in c.post){if(c.post.hasOwnProperty(a)){d=a;var b;while((b=e.exec(d))!==null){d=d.replace(b[0],String.fromCharCode(parseInt("0x"+b[1],16)))}f[d]=c.post[a]}}c.post=f}return c};SWFUpload.prototype.testExternalInterface=function(){try{return this.callFlash("TestExternalInterface")}catch(a){return false}};SWFUpload.prototype.flashReady=function(){var a=this.getMovieElement();if(!a){this.debug("Flash called back ready but the flash movie can't be found.");return}this.cleanUp(a);this.queueEvent("swfupload_loaded_handler")};SWFUpload.prototype.cleanUp=function(a){try{if(this.movieElement&&typeof(a.CallFunction)==="unknown"){this.debug("Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)");for(var c in a){try{if(typeof(a[c])==="function"){a[c]=null}}catch(b){}}}}catch(d){}window.__flash__removeCallback=function(e,f){try{if(e){e[f]=null}}catch(g){}}};SWFUpload.prototype.fileDialogStart=function(){this.queueEvent("file_dialog_start_handler")};SWFUpload.prototype.fileQueued=function(a){a=this.unescapeFilePostParams(a);this.queueEvent("file_queued_handler",a)};SWFUpload.prototype.fileQueueError=function(a,c,b){a=this.unescapeFilePostParams(a);this.queueEvent("file_queue_error_handler",[a,c,b])};SWFUpload.prototype.fileDialogComplete=function(b,c,a){this.queueEvent("file_dialog_complete_handler",[b,c,a])};SWFUpload.prototype.uploadStart=function(a){a=this.unescapeFilePostParams(a);this.queueEvent("return_upload_start_handler",a)};SWFUpload.prototype.returnUploadStart=function(a){var b;if(typeof this.settings.upload_start_handler==="function"){a=this.unescapeFilePostParams(a);b=this.settings.upload_start_handler.call(this,a)}else{if(this.settings.upload_start_handler!=undefined){throw"upload_start_handler must be a function"}}if(b===undefined){b=true}b=!!b;this.callFlash("ReturnUploadStart",[b])};SWFUpload.prototype.uploadProgress=function(a,c,b){a=this.unescapeFilePostParams(a);this.queueEvent("upload_progress_handler",[a,c,b])};SWFUpload.prototype.uploadError=function(a,c,b){a=this.unescapeFilePostParams(a);this.queueEvent("upload_error_handler",[a,c,b])};SWFUpload.prototype.uploadSuccess=function(b,a,c){b=this.unescapeFilePostParams(b);this.queueEvent("upload_success_handler",[b,a,c])};SWFUpload.prototype.uploadComplete=function(a){a=this.unescapeFilePostParams(a);this.queueEvent("upload_complete_handler",a)};SWFUpload.prototype.debug=function(a){this.queueEvent("debug_handler",a)};SWFUpload.prototype.debugMessage=function(c){if(this.settings.debug){var a,d=[];if(typeof c==="object"&&typeof c.name==="string"&&typeof c.message==="string"){for(var b in c){if(c.hasOwnProperty(b)){d.push(b+": "+c[b])}}a=d.join("\n")||"";d=a.split("\n");a="EXCEPTION: "+d.join("\nEXCEPTION: ");SWFUpload.Console.writeLine(a)}else{SWFUpload.Console.writeLine(c)}}};SWFUpload.Console={};SWFUpload.Console.writeLine=function(d){var b,a;try{b=document.getElementById("SWFUpload_Console");if(!b){a=document.createElement("form");document.getElementsByTagName("body")[0].appendChild(a);b=document.createElement("textarea");b.id="SWFUpload_Console";b.style.fontFamily="monospace";b.setAttribute("wrap","off");b.wrap="off";b.style.overflow="auto";b.style.width="700px";b.style.height="350px";b.style.margin="5px";a.appendChild(b)}b.value+=d+"\n";b.scrollTop=b.scrollHeight-b.clientHeight}catch(c){alert("Exception: "+c.name+" Message: "+c.message)}};

function showUploadWin(obj, item_id, side, is_admin, dialog_type, design_id, size) {
	var uploadContainer = 'uploadFormContainer';
	var w = 470;
	window.scrollTo(0, 0);
	if (swfobject.getFlashPlayerVersion().major == 0 || (dialog_type && 'noflash' == dialog_type)) {
		uploadContainer = 'uploadFormContainer-noflash';
		w = 500;
		$('#' + uploadContainer).dialog("destroy");
		$('#' + uploadContainer).dialog( {
			modal : false,
			title : 'Upload Photos',
			dialogClass : 'alert',
			width : w,
			closeOnEscape : false,
			resizable : false,
			close: function(event, ui){location.reload(true);},
			buttons : {
				Done : function() {
					var isUploading = $("#upload_button_waiting").is(':visible');
					var flag = true;
					if (isUploading) {
						if (!confirm('Your photo is still uploading, do you want to terminate this upload and close the dialog?')) {
							flag = false;
							return false;
						}
					}
					if (flag) {
						$(this).dialog("close");
						location.reload(true);
					}			
					// $(this).dialog("close");
				}
			},
			open: function() {
				$('.ui-dialog-buttonpane').css('background-color', '#eee');
				$('.ui-dialog-buttonpane').css('margin','0 0 0 0');
				$('.ui-dialog-buttonpane').css('border-width','2px 0 0 0');
				$('.ui-dialog-buttonpane').find('button:contains("Done")').css('color', 'black');
				$('.ui-dialog-buttonpane').find('button:contains("Done")').css("background-image", "url(/images/btn_bk.gif)");
		    }
		});
	} else {
		$.post('/ajax/uploadfile.php', {
			'item_id' : item_id,
			'side' : side,
			'is_admin' : is_admin
		}, function(data) {
			$('#' + uploadContainer).dialog("destroy");
			$('#' + uploadContainer).html(data);
			$('#' + uploadContainer).css('background-color', '#eee');
			$('#' + uploadContainer).dialog( {
				modal : false,
				title : 'Upload Photos',
				dialogClass : 'alert',
				width : w,
				closeOnEscape : false,
				resizable : false,
				close: function(){
					$(this).dialog("close");
				},
				buttons : {
					Done : function() {
						var flag = true;
						var fileId = '';
						$('#upload-queue').find("li").each(function(i, dom){
							var status = $(dom).find(".status").text();
							if (status != 'upload successful' && status != 'upload unsuccessful') {
								if (!confirm('Your photo is still uploading, do you want to terminate this upload and close the dialog?')) {
									flag = false;
								} else {
									fileId = $(dom).attr("id");
									return false;
								}
							}
						});
						if (flag) {
							//console.log($("#" + fileId).find(".cancel").parent().html());
							//swf_upload.cancelUpload('SWFUpload_0_0');
							//console.log('swf_upload=' + swf_upload);
							$("#" + fileId).find(".cancel").trigger('click');
							//$(this).dialog("close");
							location.reload(true);
						}						
					}
				},
				open: function() {
					$('.ui-dialog-buttonpane').css('background-color', '#eee');
					$('.ui-dialog-buttonpane').css('margin','0 0 0 0');
					$('.ui-dialog-buttonpane').css('border-width','2px 0 0 0');
					$('.ui-dialog-buttonpane').find('button:contains("Done")').css('font-size', '12pt');
					$('.ui-dialog-buttonpane').find('button:contains("Done")').css('color', '#333');					
					$('.ui-dialog-buttonpane').find('button:contains("Done")').css("background-image", "url(/images/btn_bk.gif)");
			    }
			});
		});
	}
	 // showDraggableWindow(obj.offsetLeft + offset_x-35, obj.offsetTop +
	 // offset_y - y_adjust, w, 'Upload Photos', uploadContainer);
}

错误如下:




请高手指教!




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值