ecshop 兼容jquery 最完美的解決方案

ecshop 兼容jquery 最完美的解決方案
原因分析:
在transport.js文件中,大概 580行到590行之間,這個句用於格式化json,他重寫了object的結構,導致於js框架衝突。衝突的原因是jquery給一個object增加了很多元素,那麼在Object.prototype.toJSONString = function () 這個函數中 for (k in this) 語句中進行了無數次的循環,導致網頁很卡,並且在IE中會報錯。

解決方案 我們最完美的解決方案是,用到jquery的頁面就用jquery 否則 保持原來的照常可以用
1. 修改transport.js文件在文件最末尾添加 一個方法 代碼如下

/* *
* 修正json.prototype信息
*/
function obj2str(o){
// 兼容 jquery
// 先刪除 ecshop 的 跟jquery 衝突對象
//delete Object.prototype.toJSONString;

var r = [];
if(typeof o =="string") return "\""+o.replace(/([\'\"\\])/g,"\\$1").replace(/(\n)/g,"\\n").replace(/(\r)/g,"\\r").replace(/(\t)/g,"\\t")+"\"";
if(typeof o =="undefined") return "undefined";
if(typeof o == "object"){
    if(o===null) return "null";
    else if(!o.sort){
        for(var i in o)
            r.push("\""+i+"\""+":"+obj2str(o[i]))
        r="{"+r.join()+"}"
    }else{
        for(var i =0;i<o.length;i++)
            r.push(obj2str(o[i]))
        r="["+r.join()+"]"
    }
    return r;
}
return o.toString();

}

2 在前臺涉及到導入transport.js文件並且和jquery衝突的的html頁面同時又用jquery的頁面 底部加入如下js

// 兼容 jquery // 然後刪除 ecshop 的 跟jquery 衝突對象 delete Object.prototype.toJSONString;

例如: 我的flow.dwt頁面有 jquery 衝突 修改下面
Ajax.call(‘flow.php?step=add_to_cart’, ‘goods=’ + goods.toJSONString(), collect_to_flow_response, ‘POST’, ‘JSON’);
改成
Ajax.call(‘flow.php?step=add_to_cart’, ‘goods=’ + obj2str(goods), collect_to_flow_response, ‘POST’, ‘JSON’);

其實就是 goods.toJSONString() 換成 obj2str(goods) 測試 ok 沒問題。
經過很長一段時間使用 沒發現問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章