zoukankan      html  css  js  c++  java
  • ecshop的 transport.js 文件和 Jquery 冲突解决方案

    参考帖子: http://bbs.ecshop.com/thread-76312-1-1.html

    ecshop的transport.js文件和Jquery是冲突的,两个文件不能同时调用,现给出以下完美解决方案:

    原因分析:
         在transport.js文件中,大概 580行到590行之间,这个句用于格式化json,他重写了object的结构,导致于js框架冲突。冲突的原因是jquery给一个object增加了很多元素,那么在Object.prototype.toJSONString = function () 这个函数中 for (k in this) 语句中进行了无数次的循环,导致网页很卡,并且在IE中会报错。


    解决方案:
        根本的解决办法是不用transport.js中的json功能,那么就要有一个相同的功能来代替它,这里我选用jquery-json.js。首先要把transport.js中的json功能删除。由于实现json功能的函数有区别,所以要改掉原ecshop中各个地方用到的toJSONString()函数。

    解决步骤:
       1. 下载附件中的js附件,并替换掉原文件。(主要去掉了transport.js的json功能并新增新的json功能)
       2. page_header.lbi 中添加 {insert_scripts files='jquery.js,jquery.json-1.3.js'}
       3. 在所有的JS中。
           替换 *.toJSONString() 为 $.toJSON(*)
           替换 *.parseJSON() 为 $.evalJSON(*)
           替换(不是去掉)页面所有的$(){}函数,防止jquery不生效

    (解释:这一步是要替换掉原ecshop里的$(){}这个函数,因为它与jquery是冲突的,解决的办法很多,可以用其他函数代替,比如getId(){}等等,也可以用jquery本身来解决,在此,我就不具体做例子了,由于最近比较忙,好多天没研究ecshop了。^_^ .还有一个解决办法,大家自行研究吧:

    jQuery.noConflict()

    运行这个函数将变量$的控制权让渡给第一个实现它的那个库。这有助于确保jQuery不会与其他库的$对象发生冲突。在运行这个函数后,就只能使用jQuery变量访问jQuery对象。例如,在要用到$("div p")的地方,就必须换成jQuery("div p")。

    注意:这个函数必须在你导入jQuery文件之后,并且在导入另一个导致冲突的库之前使用。当然也应当在其他冲突的库被使用之前,除非jQuery是最后一个导入的。)

    解决范例:
      1.在商品浏览页,用户评论这里:
      Ajax.call('comment.php', 'cmt=' + cmt.toJSONString(), commentResponse, 'POST', 'JSON');
      替换为
      Ajax.call('comment.php', 'cmt=' + $.toJSON(cmt), commentResponse, 'POST', 'JSON');

      2.index.js 里
       var res = result.parseJSON();
       替换为
       var res = $.evalJSON(result); 

    下面是 jquery-json.js 的代码

    /**
    * jQuery JSON Plugin
    * version: 2.3 (2011-09-17)
    *
    * This document is licensed as free software under the terms of the
    * MIT License: http://www.opensource.org/licenses/mit-license.php
    *
    * Brantley Harris wrote this plugin. It is based somewhat on the JSON.org
    * website's http://www.json.org/json2.js, which proclaims:
    * "NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.", a sentiment that
    * I uphold.
    *
    * It is also influenced heavily by MochiKit's serializeJSON, which is
    * copyrighted 2005 by Bob Ippolito.
    */

    (function( $ ) {

    var escapeable = /["\\\x00-\x1f\x7f-\x9f]/g,
    meta = {
    '\b': '\\b',
    '\t': '\\t',
    '\n': '\\n',
    '\f': '\\f',
    '\r': '\\r',
    '"' : '\\"',
    '\\': '\\\\'
    };

    /**
    * jQuery.toJSON
    * Converts the given argument into a JSON respresentation.
    *
    * @param o {Mixed} The json-serializble *thing* to be converted
    *
    * If an object has a toJSON prototype, that will be used to get the representation.
    * Non-integer/string keys are skipped in the object, as are keys that point to a
    * function.
    *
    */
    $.toJSON = typeof JSON === 'object' && JSON.stringify
    ? JSON.stringify
    : function( o ) {

    if ( o === null ) {
    return 'null';
    }

    var type = typeof o;

    if ( type === 'undefined' ) {
    return undefined;
    }
    if ( type === 'number' || type === 'boolean' ) {
    return '' + o;
    }
    if ( type === 'string') {
    return $.quoteString( o );
    }
    if ( type === 'object' ) {
    if ( typeof o.toJSON === 'function' ) {
    return $.toJSON( o.toJSON() );
    }
    if ( o.constructor === Date ) {
    var month = o.getUTCMonth() + 1,
    day = o.getUTCDate(),
    year = o.getUTCFullYear(),
    hours = o.getUTCHours(),
    minutes = o.getUTCMinutes(),
    seconds = o.getUTCSeconds(),
    milli = o.getUTCMilliseconds();

    if ( month < 10 ) {
    month = '0' + month;
    }
    if ( day < 10 ) {
    day = '0' + day;
    }
    if ( hours < 10 ) {
    hours = '0' + hours;
    }
    if ( minutes < 10 ) {
    minutes = '0' + minutes;
    }
    if ( seconds < 10 ) {
    seconds = '0' + seconds;
    }
    if ( milli < 100 ) {
    milli = '0' + milli;
    }
    if ( milli < 10 ) {
    milli = '0' + milli;
    }
    return '"' + year + '-' + month + '-' + day + 'T' +
    hours + ':' + minutes + ':' + seconds +
    '.' + milli + 'Z"';
    }
    if ( o.constructor === Array ) {
    var ret = [];
    for ( var i = 0; i < o.length; i++ ) {
    ret.push( $.toJSON( o[i] ) || 'null' );
    }
    return '[' + ret.join(',') + ']';
    }
    var name,
    val,
    pairs = [];
    for ( var k in o ) {
    type = typeof k;
    if ( type === 'number' ) {
    name = '"' + k + '"';
    } else if (type === 'string') {
    name = $.quoteString(k);
    } else {
    // Keys must be numerical or string. Skip others
    continue;
    }
    type = typeof o[k];

    if ( type === 'function' || type === 'undefined' ) {
    // Invalid values like these return undefined
    // from toJSON, however those object members
    // shouldn't be included in the JSON string at all.
    continue;
    }
    val = $.toJSON( o[k] );
    pairs.push( name + ':' + val );
    }
    return '{' + pairs.join( ',' ) + '}';
    }
    };

    /**
    * jQuery.evalJSON
    * Evaluates a given piece of json source.
    *
    * @param src {String}
    */
    $.evalJSON = typeof JSON === 'object' && JSON.parse
    ? JSON.parse
    : function( src ) {
    return eval('(' + src + ')');
    };

    /**
    * jQuery.secureEvalJSON
    * Evals JSON in a way that is *more* secure.
    *
    * @param src {String}
    */
    $.secureEvalJSON = typeof JSON === 'object' && JSON.parse
    ? JSON.parse
    : function( src ) {

    var filtered =
    src
    .replace( /\\["\\\/bfnrtu]/g, '@' )
    .replace( /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
    .replace( /(?:^|:|,)(?:\s*\[)+/g, '');

    if ( /^[\],:{}\s]*$/.test( filtered ) ) {
    return eval( '(' + src + ')' );
    } else {
    throw new SyntaxError( 'Error parsing JSON, source is not valid.' );
    }
    };

    /**
    * jQuery.quoteString
    * Returns a string-repr of a string, escaping quotes intelligently.
    * Mostly a support function for toJSON.
    * Examples:
    * >>> jQuery.quoteString('apple')
    * "apple"
    *
    * >>> jQuery.quoteString('"Where are we going?", she asked.')
    * "\"Where are we going?\", she asked."
    */
    $.quoteString = function( string ) {
    if ( string.match( escapeable ) ) {
    return '"' + string.replace( escapeable, function( a ) {
    var c = meta[a];
    if ( typeof c === 'string' ) {
    return c;
    }
    c = a.charCodeAt();
    return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
    }) + '"';
    }
    return '"' + string + '"';
    };

    })( jQuery );



  • 相关阅读:
    ios界面布局整理
    android ProGuard 代码混淆实现
    mac版 android破解软件下载安装
    在unix系统下的 .o文件 .a文件 .so文件说明和相互关系
    android中的广播接收实现总结
    用java的jdk 生成android 的jni接口文档
    Android 自定义Application
    android项目中配置NDK自动编译生成so文件
    创建android Notification
    (ios) nsnotification总结
  • 原文地址:https://www.cnblogs.com/caly/p/2290127.html
Copyright © 2011-2022 走看看