ECshop与jQuery冲突的问题由来已久,解决方法大多繁琐,且在一些小地方会出错,如产品比较功能等,本文中的方法结合了网上最新公开文章与本站实际开发过程中的经验,基本上可完美解决ECshop与jQuery的冲突,经测试,兼容ECshop原有所有的功能,包括产品比较功能,而且修改步骤简单明了:

1、修改文件:/js/transport.js
在文件最底部增加代码:

if (Object.prototype.toJSONString) {
	var oldToJSONString = Object.toJSONString;
	Object.prototype.toJSONString = function() {
		if (arguments.length > 0) {
			return false;
		} else {
			return oldToJSONString.apply(this, arguments);
		}
	}
}

2、修改文件:/js/compare.js
查找代码:

this.timer = window.setInterval(this.relocation.bind(this), 50);

修改为:

this.timer = window.setInterval(this.bind(this.relocation,this), 50);

查找代码:

lastScrollY : 0

在代码上面一行增加代码:

bind: function(obj1, obj2) {
	return function() {
		obj1.apply(obj2, arguments);
	}
},

3、在以下模板文件中,找到嵌入global.js文件的代码,删除嵌入global.js
brand.dwt
brand_list.dwt
category.dwt
exchange_list.dwt
search.dwt

4、下载最新版的jquery库文件到模板目录中,如:
/themes/temlatename/images/js/jquery.1.5.2.js

如果你的模板中没有对应目录,则新建目录拷入jquery文件即可

5、修改文件:/themes/temlatename/library/page_header.lbi

在顶部加入代码:

<script src="images/js/jquery.1.5.2.min.js" type="text/javascript"></script>
<script type="text/javascript">var $$=jQuery.noConflict();</script>

注意,以后调用JQUERY对象要用两个美元符$$,不要用一个$,因为一个$与ECshop原有的函数同名有兼容问题。

6. 到此应该就能解决冲突了

另外一种方法:

ecshop模板兼容jquery问题, 一直是困扰开发人员的棘手问题,主要原因是 transprot.js  文件中, 大概 580行到590行之间,这个句用于格式化json,他重写了object的结构,导致于js框架冲突。冲突的原因是jquery给一个object增加了很多元素,那么在Object.prototype.toJSONString = function () 这个函数中 for (k in this) 语句中进行了无数次的循环,导致网页很卡,并且在IE中会报错。

ECSHOP开发中心为您提供一个简单的解决transport.js 和 jquery 方法:

在 page_header.lbi 库文件中加入如下代码,注意操作顺序:

1.先导入transport.js  文件 {insert_scripts files='transport.js,utils.js'}

2.然后导入您网站使用的jquery文件
<script language="javascript" src="您的jquery存放路径"></script>

3.加入代码

<script type="text/javascript">
$(function() {
window.__Object_toJSONString = Object.prototype.toJSONString;
delete Object.prototype.toJSONString;
});
</script>
暂无评论