zoukankan      html  css  js  c++  java
  • php 广告加载类

    php 广告加载类,支持异步与同步加载。需要使用Jquery

    ADLoader.class.php

    <?php
    /** 广告加载管理类
    *   Date:   2013-08-04
    *   Author: fdipzone
    *   Ver:    1.0
    *
    *   Func:
    *   public  load         加载广告集合
    *   public  setConfig    广告配置
    *   private getAds       根据channel创建广告集合
    *   private genZoneId    zoneid base64_encode 处理
    *   private genHtml      生成广告html
    *   private checkBrowser 检查是否需要同步加载的浏览器
    */
    
    class ADLoader{ // class start
    
        private static $_ads = array();     // 广告集合
        private static $_step = 300;        // 广告加载间隔
        private static $_async = true;      // 是否异步加载
        private static $_config = array();  // 广告设置文件
        private static $_jsclass = null;    // 广告JS class
    
    
        /** 加载广告集合
        * @param String  $channel 栏目,对应config文件
        * @param int     $step    广告加载间隔
        * @param boolean $async   是否异步加载
        */
        public static function load($channel='', $step='', $async=''){
            if(isset($step) && is_numeric($step) && $step>0){
                self::$_step = $step;
            }
    
            if(isset($async) && is_bool($async)){
                self::$_async = $async;
            }
    
            // 判断浏览器,如IE强制使用同步加载
            if(!self::checkBrowser()){
                self::$_async = false;
            }
    
            self::getAds($channel);
            self::genZoneId();
    
            return self::genHtml();
        }
    
    
        /** 设置config
        * @param String $config  广告配置
        * @param String $jsclass js class文件路径
        */
        public static function setConfig($config=array(), $jsclass=''){
            self::$_config = $config;
            self::$_jsclass = $jsclass;
        }
    
    
        /** 根据channel创建广告集合
        * @param String $channel 栏目
        */
        private static function getAds($channel=''){
            $AD_Config = self::$_config;
            if($AD_Config!=null){
                self::$_ads = isset($AD_Config[$channel])? $AD_Config[$channel] : $AD_Config['default'];
            }
        }
    
    
        /** zoneid base64_encode 处理 */
        private static function genZoneId(){
    
            // 同步加载广告不需要处理zoneid
            if(!self::$_async){
                return ;
            }
    
            $ads = self::$_ads;
            for($i=0,$len=count($ads); $i<$len; $i++){
                if(isset($ads[$i]['zoneId'])){
                    $ads[$i]['zoneId'] = base64_encode('var zoneid='.$ads[$i]['zoneId'].';');
                }
            }
            self::$_ads = $ads;
        }
    
    
        /** 生成广告html */
        private static function genHtml(){
            $ads = self::$_ads;
            $html = array();
            if(self::$_jsclass!=null && $ads){
                array_push($html, '<script type="text/javascript" src="'.self::$_jsclass.'"></script>');
    
    			// 同步需要预先加载
                if(!self::$_async){
    				foreach($ads as $ad){
    					array_push($html, '<div id="'.$ad['domId'].'_container" style="display:none">');
    					array_push($html, '<script type="text/javascript">');
    					array_push($html, 'ADLoader.preload('.json_encode($ad).');');
    					array_push($html, '</script>');
    					array_push($html, '</div>');
    				}
                }
    
    			array_push($html, '<script type="text/javascript">');
                array_push($html, 'var ads='.json_encode($ads).';');
                array_push($html, '$(document).ready(function(){ ADLoader.load(ads, '.self::$_step.', '.intval(self::$_async).'); });');
                array_push($html, '</script>');
            }
            return implode("
    ", $html);
        }
    
    
        /** 判断是否需要强制同步加载的浏览器 */
        private static function checkBrowser(){
            $user_agent = $_SERVER['HTTP_USER_AGENT'];
            if(strstr($user_agent,'MSIE')!=''){
                return false;
            }
            return true;
        }
    
    } // class end
    
    ?>

    ADConfig.php

    <?php
    /** 广告配置文件 **/
    
    return array(
    
        'case_openx' => array(
            array(
                'type' => 'openx',
                'domId' => 'ad_728x90',
                'zoneId' => 452
            ),
            array(
                'type' => 'openx',
                'domId' => 'ad_300x250',
                'zoneId' => 449
            ),
            array(
                'type' => 'openx',
                'domId' => 'ad_l2_300x250',
                'zoneId' => 394
            ),
        ),
    
        'case_url' => array(
            array(
                'type' => 'url',
                'domId' => 'ad_728x90',
                'url' => 'adurl.php?zoneid=452'
            ),
            array(
                'type' => 'url',
                'domId' => 'ad_300x250',
                'url' => 'adurl.php?zoneid=449'
            ),
            array(
                'type' => 'url',
                'domId' => 'ad_l2_300x250',
                'url' => 'adurl.php?zoneid=394'
            )
        ),
    
        'case_sync_openx' => array(
            array(
                'type' => 'openx',
                'domId' => 'ad_728x90',
                'zoneId' => 452
            ),
            array(
                'type' => 'openx',
                'domId' => 'ad_300x250',
                'zoneId' => 449
            ),
            array(
                'type' => 'openx',
                'domId' => 'ad_l2_300x250',
                'zoneId' => 394
            ),
        ),
    
        'default' => array(
            array(
                'type' => 'openx',
                'domId' => 'ad_728x90',
                'zoneId' => 452
            ),
            array(
                'type' => 'openx',
                'domId' => 'ad_300x250',
                'zoneId' => 449
            ),
            array(
                'type' => 'openx',
                'domId' => 'ad_l2_300x250',
                'zoneId' => 394
            ),
        ),
    
    );
    
    ?>
    ADLoader.js
    /** 异步加载广告
    *   Date:   2013-08-04
    *   Author: fdipzone
    *   Ver:    1.0
    */
    var ADLoader = (function(){
    
        var _ads = [],     // 广告集合
            _step = 300,   // 广告加载间隔
            _async = true, // 是否异步加载
            _loaded = 0;   // 已经加载的广告数
    
        
        /** loadAd 循环加载广告
        * @param int c 第几个广告
        */
        function loadAD(c){
            if(_loaded>=_ads.length){
                return ;
            }
    
            if($('#'+_ads[c].domId).length>0){ // 判断dom是否存在
    
                if(_async){ // 异步执行
    
                    crapLoader.loadScript(getScript(_ads[c]), _ads[c].domId, {
                        success: function(){
                            completeAd();
                        }
                    });
                
                }else{ // 将同步加载的广告显示
    
                    var ad_container = $('#'+_ads[c].domId+'_container');
                    ad_container.find('embed').attr('wmode','transparent').end().find('object').each(function(k, v){
                        v.wmode = 'transparent'; // 将flash变透明
                    });
                    $('#'+_ads[c].domId)[0].appendChild(ad_container[0]);
                    ad_container.show();
                    
                    completeAd();
    
                }
    
            }else{ // dom不存在
                completeAd();
            }
        }
    
        /** 加载完广告后处理 */
        function completeAd(){
            _loaded ++;
            setTimeout(function(){
                loadAD(_loaded);
            }, _step);        
        }
    
        /** 获取广告
        * @param Array ad 广告参数
        */
        function getScript(ad){
            var ret = null;
    
            switch(ad.type){
                case 'openx':  // openx code ad
                    ret = 'data:text/javascript;base64,' + ad.zoneId + 'dmFyIG0zX3UgPSAobG9jYXRpb24ucHJvdG9jb2w9PSdodHRwczonPydodHRwczovL2Fkcy5ubWcuY29tLmhrL3d3dy9kZWxpdmVyeS9hanMucGhwJzonaHR0cDovL2Fkcy5ubWcuY29tLmhrL3d3dy9kZWxpdmVyeS9hanMucGhwJyk7CnZhciBtM19yID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjk5OTk5OTk5OTk5KTsKaWYgKCFkb2N1bWVudC5NQVhfdXNlZCkgZG9jdW1lbnQuTUFYX3VzZWQgPSAnLCc7CmRvY3VtZW50LndyaXRlICgiPHNjciIrImlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0nIittM191KTsKZG9jdW1lbnQud3JpdGUgKCI/em9uZWlkPSIgKyB6b25laWQpOwpkb2N1bWVudC53cml0ZSAoJyZhbXA7Y2I9JyArIG0zX3IpOwppZiAoZG9jdW1lbnQuTUFYX3VzZWQgIT0gJywnKSBkb2N1bWVudC53cml0ZSAoIiZhbXA7ZXhjbHVkZT0iICsgZG9jdW1lbnQuTUFYX3VzZWQpOwpkb2N1bWVudC53cml0ZSAoZG9jdW1lbnQuY2hhcnNldCA/ICcmYW1wO2NoYXJzZXQ9Jytkb2N1bWVudC5jaGFyc2V0IDogKGRvY3VtZW50LmNoYXJhY3RlclNldCA/ICcmYW1wO2NoYXJzZXQ9Jytkb2N1bWVudC5jaGFyYWN0ZXJTZXQgOiAnJykpOwpkb2N1bWVudC53cml0ZSAoIiZhbXA7bG9jPSIgKyBlc2NhcGUod2luZG93LmxvY2F0aW9uKSk7CmlmIChkb2N1bWVudC5yZWZlcnJlcikgZG9jdW1lbnQud3JpdGUgKCImYW1wO3JlZmVyZXI9IiArIGVzY2FwZShkb2N1bWVudC5yZWZlcnJlcikpOwppZiAoZG9jdW1lbnQuY29udGV4dCkgZG9jdW1lbnQud3JpdGUgKCImY29udGV4dD0iICsgZXNjYXBlKGRvY3VtZW50LmNvbnRleHQpKTsKaWYgKGRvY3VtZW50Lm1tbV9mbykgZG9jdW1lbnQud3JpdGUgKCImYW1wO21tbV9mbz0xIik7CmRvY3VtZW50LndyaXRlICgiJz48XC9zY3IiKyJpcHQ+Iik7';
                    break;
               
                case 'url': // url ad
                    ret = ad.url;
                    break;
            }
    
            return ret;
        }
    
        /** 同步加载广告
        * @param Array ad 广告参数
        */
        function writeAd(ad){
            switch(ad.type){
                case 'openx':
                    var m3_u = (location.protocol=='https:'?'https://ads.nmg.com.hk/www/delivery/ajs.php':'http://ads.nmg.com.hk/www/delivery/ajs.php');
                    var m3_r = Math.floor(Math.random()*99999999999);
                    if (!document.MAX_used) document.MAX_used = ',';
                    document.write ("<scr"+"ipt type='text/javascript' src='"+m3_u);
                    document.write ("?zoneid=" + ad.zoneId);
                    document.write ('&cb=' + m3_r);
                    if (document.MAX_used != ',') document.write ("&exclude=" + document.MAX_used);
                    document.write (document.charset ? '&charset='+document.charset : (document.characterSet ? '&charset='+document.characterSet : ''));
                    document.write ("&loc=" + escape(window.location));
                    if (document.referrer) document.write ("&referer=" + escape(document.referrer));
                    if (document.context) document.write ("&context=" + escape(document.context));
                    if (document.mmm_fo) document.write ("&mmm_fo=1");
                    document.write ("'></scr"+"ipt>");
                    break;
                 case 'url':
                    document.write ('<script type="text/javascript" src="' + ad.url + '"></script>');
                    break;
            }
        }
    
    
        obj = {
    
            /** 加载广告
            * @param Array   ads   广告集合
            * @param int     step  广告加载间隔
            * @param boolean async true:异步加载 false:同步加载
            */
            load: function(ads, step, async){
                _ads = ads;
    
                if(typeof(step)!='undefined'){
                    _step = step;
                }
    
                if(typeof(async)!='undefined'){
                    _async = async;
                }
    
                loadAD(_loaded);
            },
    
            /** 预加载广告 */
            preload: function(ad){
                if($('#'+ad.domId).length>0){   // 判断dom是否存在
                    writeAd(ad);
                }
            }
    
        }
    
        return obj;
    
    }());
    
    
    /* crapLoader */
    var crapLoader = (function() {
        
        var isHijacked = false,
            queue = [],
            inputBuffer = [],
            writeBuffer = {},
            loading = 0,
            elementCache = {},
            returnedElements = [],
            splitScriptsRegex = /(<script[sS]*?</script>)/gim,
            globalOptions = {
                autoRelease: true,
                parallel: true,
                debug: false
            },
            defaultOptions = {
                charset: undefined,
                success: undefined,
                func: undefined,
                src: undefined,
                timeout: 3000
            },publ,
            head = document.getElementsByTagName("head")[0] || document.documentElement,
            support = {
                scriptOnloadTriggeredAccurately: false,
                splitWithCapturingParentheses: ("abc".split(/(b)/)[1]==="b")
            };
    
    
        
        function checkQueue () {
            if(queue.length) {
                loadScript( queue.shift() );
            } else if(loading === 0 && globalOptions.autoRelease) {
                debug("Queue is empty. Auto-releasing.");
                publ.release();
            }
        }
    
        function checkWriteBuffer (obj) {
            var buffer = writeBuffer[obj.domId],
                returnedEl;
    
            if(buffer && buffer.length) {
                writeHtml( buffer.shift(), obj );
    
            } else {
                while (returnedElements.length > 0) {
                    returnedEl = returnedElements.pop();
                    var id = returnedEl.id;
                    var elInDoc = getElementById(id);
                    if (!elInDoc) { continue; }
                    var parent = elInDoc.parentNode;
                    elInDoc.id = id + "__tmp";
                    parent.insertBefore(returnedEl, elInDoc);
                    parent.removeChild(elInDoc);
                }
                finished(obj);
            }
        }
    
        function debug (message, obj) {
            if(!globalOptions.debug || !window.console) { return; }
            var objExtra = "";
            if(obj) {
                objExtra = "#"+obj.domId+" ";
                var depth = obj.depth;
                while(depth--) { objExtra += "    "; }
            }
            console.log("crapLoader " + objExtra + message);
        }
    
        function extend (t, s) {
            var k;
            if(!s) { return t; }
            for(k in s) {
                t[k] = s[k];
            }
            return t;
        }
    
        function finished (obj) {
            if(obj.success && typeof obj.success === "function") {
                obj.success.call( document.getElementById(obj.domId) );
            }
    
            checkQueue();
        }
    
        function flush (obj) {
            var domId = obj.domId,
               outputFromScript,
               htmlPartArray;
    
            outputFromScript = stripNoScript( inputBuffer.join("") );
            inputBuffer = [];
    
            htmlPartArray = separateScriptsFromHtml( outputFromScript );
    
            if(!writeBuffer[domId]) {
                writeBuffer[domId] = htmlPartArray;
            } else {
                Array.prototype.unshift.apply(writeBuffer[domId], htmlPartArray);
            }
            checkWriteBuffer(obj);
        }
    
        function getCachedElById (domId) {
            return elementCache[domId] || (elementCache[domId] = document.getElementById(domId));
        }
    
        function getElementById (domId) {
            return ( publ.orgGetElementById.call ?
                publ.orgGetElementById.call(document, domId) :
                publ.orgGetElementById(domId) );
        }
    
        function getElementByIdReplacement (domId) {
            var el = getElementById(domId),
                html, frag, div, found;
    
            function traverseForElById(domId, el) {
                var children = el.children, i, l, child;
                if(children && children.length) {
                    for(i=0,l=children.length; i<l; i++) {
                        child = children[i];
                        if(child.id && child.id === domId) { return child; }
                        if(child.children && child.children.length) {
                            var tmp = traverseForElById(domId, child);
                            if (tmp) return tmp;
                        }
                    }
                }
            }
    
            function searchForAlreadyReturnedEl(domId) {
                var i, l, returnedEl;
                for(i=0,l=returnedElements.length; i<l; i++) {
                    returnedEl = returnedElements[i];
                    if(returnedEl.id === domId) { return returnedEl; }
                }
            }
    
            if(el) { return el; }
    
            if (returnedElements.length) {
                found = searchForAlreadyReturnedEl(domId);
                if (found) {
                    return found;
                }
            }
    
            if(inputBuffer.length) {
                html = inputBuffer.join("");
                frag = document.createDocumentFragment();
                div = document.createElement("div");
                div.innerHTML = html;
                frag.appendChild(div);
                found = traverseForElById(domId, div);
                if (found) {
                    returnedElements.push(found);
                }
                return found;
            }
        }
    
        var globalEval = (function () {
            return (window.execScript ? function(code, language) {
                window.execScript(code, language || "JavaScript");
            } : function(code, language) {
                if(language && !/^javascript/i.test(language)) { return; }
                window.eval.call(window, code);
            });
        }());
    
        function isScript (html) {
            return html.toLowerCase().indexOf("<script") === 0;
        }
    
        function runFunc (obj) {
            obj.func();
            obj.depth++;
            flush(obj);
        }
    
        function loadScript (obj) {
            loading++;
            // async loading code from jQuery
            var script = document.createElement("script");
            if(obj.type) { script.type = obj.type; }
            if(obj.charset) { script.charset = obj.charset; }
            if(obj.language) { script.language = obj.language; }
    
            logScript(obj);
    
            var done = false;
            // Attach handlers for all browsers
            script.onload = script.onreadystatechange = function() {
                loading--;
                script.loaded = true;
                if ( !done && (!this.readyState ||
                        this.readyState === "loaded" || this.readyState === "complete") ) {
                    done = true;
                    script.onload = script.onreadystatechange = null;
                    debug("onload " + obj.src, obj);
                    flush(obj);
                }
            };
    
            script.loaded = false;
            script.src = obj.src;
            obj.depth++;
    
            // Use insertBefore instead of appendChild  to circumvent an IE6 bug.
            // This arises when a base node is used (#2709 and #4378).
            head.insertBefore( script, head.firstChild );
            setTimeout(function() {
                if(!script.loaded) { throw new Error("SCRIPT NOT LOADED: " + script.src); }
            }, obj.timeout);
        }
    
        function logScript (obj, code, lang) {
            debug((code ?
                "Inline " + lang + ": " + code.replace("
    ", " ").substr(0, 30) + "..." :
                "Inject " + obj.src), obj);
        }
    
        function separateScriptsFromHtml (htmlStr) {
            return split(htmlStr, splitScriptsRegex);
        }
    
        function split (str, regexp) {
            var match, prevIndex=0, tmp, result = [], i, l;
    
            if(support.splitWithCapturingParentheses) {
                tmp = str.split(regexp);
            } else {
                // Cross browser split technique from Steven Levithan
                // http://blog.stevenlevithan.com/archives/cross-browser-split
                tmp = [];
                while(match = regexp.exec(str)) {
                    if(match.index > prevIndex) {
                        result.push(str.slice(prevIndex, match.index));
                    }
    
                    if(match.length > 1 && match.index < str.length) {
                        Array.prototype.push.apply(tmp, match.slice(1));
                    }
    
                    prevIndex = regexp.lastIndex;
                }
    
                if(prevIndex < str.length) {
                    tmp.push(str.slice(prevIndex));
                }
    
            }
    
            for(i=0, l=tmp.length; i<l; i=i+1) {
                if(tmp[i]!=="") { result.push(tmp[i]); }
            }
    
            return result;
        }
    
        function stripNoScript (html) {
            return html.replace(/<noscript>[sS]*?</noscript>/ig, "");
        }
    
        function trim (str) {
            if(!str) { return str; }
            return str.replace(/^s*|s*$/gi, "");
        }
    
        function writeHtml (html, obj) {
            if( isScript(html) ) {
                var dummy = document.createElement("div");
                dummy.innerHTML = "dummy<div>" + html + "</div>"; // trick for IE
                var script = dummy.children[0].children[0];
                var lang = script.getAttribute("language") || "javascript";
                if(script.src) {
                    obj.src = script.src;
                    obj.charset = script.charset;
                    obj.language = lang;
                    obj.type = script.type;
                    loadScript(obj);
                } else {
                    var code = trim( script.text );
                    if(code) {
                        logScript( obj, code, lang);
                        globalEval( code, lang);
                    }
                    flush(obj);
                }
            } else {
                var container = getCachedElById(obj.domId);
                if(!container) {
                    throw new Error("crapLoader: Unable to inject html. Element with id '" + obj.domId + "' does not exist");
                }
                
                html = trim(html); // newline before <object> cause weird effects in IE
                if(html) {
                    container.innerHTML += html;
                }
                checkWriteBuffer(obj);
            }
        }
    
        function writeReplacement (str) {
            inputBuffer.push(str);
            debug("write: " + str);
        }
    
        function openReplacement () {
            // document.open() just returns the document when called from a blocking script:
            // http://www.whatwg.org/specs/web-apps/current-work/#dom-document-open
            return document;
        }
    
        function closeReplacement () {
            // document.close() does nothing when called from a blocking script:
            // http://www.whatwg.org/specs/web-apps/current-work/#dom-document-close
        }
    
        publ = {
            hijack: function(options) {
                if(isHijacked) { return; }
                isHijacked = true;
                extend(globalOptions, options);
                if(globalOptions.parallel && !support.scriptOnloadTriggeredAccurately) {
                    globalOptions.parallel = false;
                    debug("Browsers onload is not reliable. Disabling parallel loading.");
                }
    
                document.write = document.writeln = writeReplacement;
                document.open = openReplacement;
                document.close = closeReplacement;
                document.getElementById = getElementByIdReplacement;
            },
    
            release: function() {
                if(!isHijacked) { return; }
                isHijacked = false;
                document.write = this.orgWrite;
                document.writeln = this.orgWriteLn;
                document.open = this.orgOpen;
                document.close = this.orgClose;
                document.getElementById = this.orgGetElementById;
                elementCache = {};
            },
    
            handle: function(options) {
                if(!isHijacked) {
                    debug("Not in hijacked mode. Auto-hijacking.");
                    this.hijack();
                }
                var defaultOptsCopy = extend({}, defaultOptions);
                var obj = extend(defaultOptsCopy, options);
                obj.depth = 0;
    
                if (!obj.domId) {
                    obj.domId = "craploader_" + new Date().getTime();
                    var span = document.createElement("span");
                    span.id = obj.domId;
                    document.body.appendChild(span);
                }
    
                if (options.func) {
                    runFunc(obj);
                    return;
                }
    
                if(globalOptions.parallel) {
                    setTimeout(function() {
                        loadScript(obj);
                    }, 1);
                } else {
                    queue.push(obj);
                    setTimeout(function() {
                        if(loading === 0) {
                            checkQueue();
                        }
                    }, 1);
                }
            },
    
            loadScript: function(src, domId, options) {
                if (typeof domId !== "string") {
                    options = domId;
                    domId = undefined;
                }
                this.handle(extend({
                    src:    src,
                    domId:  domId
                }, options));
            },
    
            runFunc: function(func, domId, options) {
                if (typeof domId !== "string") {
                    options = domId;
                    domId = undefined;
                }
                this.handle( extend({
                    domId:  domId,
                    func:     func
                }, options) );
            },
    
            orgGetElementById   : document.getElementById,
            orgWrite            : document.write,
            orgWriteLn          : document.writeln,
            orgOpen             : document.open,
            orgClose            : document.close,
            _olt                : 1,
            _oltCallback        : function() {
                support.scriptOnloadTriggeredAccurately = (publ._olt===2);
            }
        };
    
        return publ;
    }());
    demo.php
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
     <head>
      <meta http-equiv="content-type" content="text/html; charset=utf-8">
      <title> AD Loader </title>
      <style type="text/css">
      .banner1{margin:10px; border:1px solid #CCCCCC; 728px; height:90px;}
      .banner2{margin:10px; border:1px solid #CCCCCC; 300px; height:250px;}
      </style>
      <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
     </head>
    
     <body>
      <div class="banner1" id="ad_728x90"></div>
      <div class="banner2" id="ad_300x250"></div>
      <div class="banner2" id="ad_l2_300x250"></div>
       
      <?php
        function showAD($channel='', $step='', $async=''){
          include('ADLoader.class.php');
          $ad_config = include('ADConfig.php');
          ADLoader::setConfig($ad_config, 'ADLoader.js');
          return ADLoader::load($channel, $step, $async);
        }
    
        echo showAD('case_openx'); // 异步加载
        //echo showAD('case_url');   // url方式异步加载
        //echo showAD('case_sync_openx', 300, false); // 同步加载
      ?>
    
     </body>
    </html>

    adurl.php

    <?php
    $zoneid = isset($_GET['zoneid'])? intval($_GET['zoneid']) : 0;
    if($zoneid){
    ?>
    var zoneid = <?=$zoneid ?>;
    var m3_u = (location.protocol=='https:'?'https://ads.nmg.com.hk/www/delivery/ajs.php':'http://ads.nmg.com.hk/www/delivery/ajs.php');
    var m3_r = Math.floor(Math.random()*99999999999);
    if (!document.MAX_used) document.MAX_used = ',';
    document.write ("<scr"+"ipt type='text/javascript' src='"+m3_u);
    document.write ("?zoneid=" + zoneid);
    document.write ('&cb=' + m3_r);
    if (document.MAX_used != ',') document.write ("&exclude=" + document.MAX_used);
    document.write (document.charset ? '&charset='+document.charset : (document.characterSet ? '&charset='+document.characterSet : ''));
    document.write ("&loc=" + escape(window.location));
    if (document.referrer) document.write ("&referer=" + escape(document.referrer));
    if (document.context) document.write ("&context=" + escape(document.context));
    if (document.mmm_fo) document.write ("&mmm_fo=1");
    document.write ("'></scr"+"ipt>");
    <? } ?>
    源码下载地址:点击查看

  • 相关阅读:
    获取发布的头条的url,避免点击打开新的页面
    下载图片 保存至本地 返回路径
    线程运行的3个状态
    程序并发执行所需付出的时空开销
    web metrics dashboard 数据分析工具 看板 从可视化发现问题 避免sql重复写 调高效率
    Binary safe
    simple dynamic string
    a
    a
    从业务角度 减少代码执行的时间 和 因长时间执行的而带来的代码复杂性 日志恢复数据
  • 原文地址:https://www.cnblogs.com/fdipzone/p/3715096.html
Copyright © 2011-2022 走看看