php广告加载类用法实例
这篇文章主要介绍了php广告加载类用法实例,采用jQuery技术可实现异步与同步加载,具有非常广泛的实用价值,需要的朋友可以参考下
本文实例讲述了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 zonezoneId'].';');
- }
- }
- 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 .$ad['domId'].'_container" >');
- 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("\r\n", $html);
- } //www.phpfensi.com
- /** 判断是否需要强制同步加载的浏览器 */
- 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?zone
- ),
- array(
- 'type' => 'url',
- 'domId' => 'ad_300x250',
- 'url' => 'adurl.php?zone
- ),
- array(
- 'type' => 'url',
- 'domId' => 'ad_l2_300x250',
- 'url' => 'adurl.php?zone
- )
- ),
- '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[\s\S]*?<\/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("\n", " ").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>[\s\S]*?<\/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);
- } //www.phpfensi.com
- };
- 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; width:728px; height:90px;}
- .banner2{margin:10px; border:1px solid #CCCCCC; width: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" ></div>
- <div class="banner2" ></div>
- <div class="banner2" ></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>");
- <? } ?>