阿里云服务器免费领卷啦。

捡代码论坛-最全的游戏源码下载技术网站!

 找回密码
 立 即 注 册

QQ登录

只需一步,快速开始

搜索
关于源码区的附件失效或欺骗帖, 处理办法
查看: 3598|回复: 0

[其它] topthink广告平台js客户端

[复制链接]

4208

主题

210

回帖

12万

积分

管理员

管理员

Rank: 9Rank: 9Rank: 9

积分
126075
QQ
发表于 2017-10-19 23:39:14 | 显示全部楼层 |阅读模式
http://ad.topthink.com/Public/static/client.js
  1. /**
  2. * topthink广告平台js客户端
  3. * 版权所有 上海顶想信息科技有限公司
  4. * 作者:翟帅干 zhaishuaigan@qq.com
  5. * 作用: 根据页面think标签加载广告
  6. * 注意: 此文件必须在think标签之前加载, 否则无效
  7. */
  8. (function () {
  9.     // 如果文件被加载过, 直接返回, 解决一个页面有多个广告位的js被加载多次问题
  10.     if (window._thinkAd) {
  11.         return;
  12.     }
  13.     window._thinkAd = true;

  14.     // 让浏览器支持自定义标签think
  15.     document.createElement('thinkad');
  16.     document.createElement('think');
  17.     // 配置项
  18.     var thinkAdConfig = {
  19.         // 接口地址
  20.         'api'       : '//e.topthink.com/api/basic',
  21.         // js路径
  22.         'jsPath'    : '//e.topthink.com/Public/static/',
  23.         // 默认接口
  24.         'defaultApi': 'basic'
  25.     };
  26.     // 广告帮助类
  27.     var thinkHelper   = window.thinkHelper = {};

  28.     // 获取文档的head对象
  29.     thinkHelper.head = document.getElementsByTagName('head')[0];

  30.     // 空方法, 用于初始化和释放一些特定的函数, 如获取js成功后调用的函数
  31.     thinkHelper.emptyFunc = function () {
  32.         // 什么都不做
  33.     };

  34.     /**
  35.      * 作用: 获取和加载js文件函数,
  36.      * @param {string} scriptUrl 要加在的js地址
  37.      * @param {bool} cache 是否缓存(默认不缓存false)
  38.      * @returns {object}
  39.      */
  40.     thinkHelper.getScript = function (scriptUrl, cache) {
  41.         var cache                 = arguments[1] ? arguments[1] : false;
  42.         var success               = thinkHelper.emptyFunc;
  43.         var error                 = thinkHelper.emptyFunc;
  44.         var script                = document.createElement('script');
  45.         script.onload             = function () {
  46.             // 加载成功
  47.             success();
  48.             success = thinkHelper.emptyFunc;
  49.         };
  50.         script.onreadystatechange = function () {
  51.             // ie9一下的加载成功判断
  52.             if (this.readyState && this.readyState === 'loaded') {
  53.                 success();
  54.                 success = thinkHelper.emptyFunc;
  55.             }
  56.         };
  57.         script.onerror            = function () {
  58.             // 加载失败
  59.             error();
  60.             error = thinkHelper.emptyFunc;
  61.         };
  62.         script.type               = 'text/javascript';
  63.         if (!cache) {
  64.             // 如果不缓存就在url后添加随机数
  65.             scriptUrl = thinkHelper.addQueryParams(scriptUrl, {
  66.                 '_t': Math.random()
  67.             });
  68.         }
  69.         script.src = scriptUrl;
  70.         thinkHelper.head.appendChild(script);
  71.         var result = {
  72.             success: function (func) {
  73.                 success = func;
  74.                 return result;
  75.             },
  76.             error  : function (func) {
  77.                 error = func;
  78.                 return result;
  79.             }
  80.         };
  81.         return result;
  82.     };

  83.     /**
  84.      * 作用: 加载css文件助手函数
  85.      * @param {string} cssUrl css文件路径
  86.      * @param {bool} cache 是否缓存(默认false, 不缓存)
  87.      * @returns {undefined}
  88.      */
  89.     thinkHelper.getStyle = function (cssUrl, cache) {
  90.         var cache = arguments[1] ? arguments[1] : false;
  91.         var link  = document.createElement('link');
  92.         link.rel  = 'stylesheet';
  93.         link.type = 'text/css';
  94.         if (!cache) {
  95.             cssUrl = thinkHelper.addQueryParams(cssUrl, {
  96.                 '_t': Math.random()
  97.             });
  98.         }
  99.         link.href = cssUrl;
  100.         thinkHelper.head.appendChild(link);
  101.     };
  102.     /**
  103.      * 作用: 给文档追加css代码
  104.      * @param {string} cssString css代码
  105.      * @returns {undefined}
  106.      */
  107.     thinkHelper.addCssString = function (cssString) {
  108.         var style = document.createElement("style");
  109.         style.setAttribute("type", "text/css");
  110.         if (style.styleSheet) {
  111.             style.styleSheet.cssText = cssString;
  112.         } else {
  113.             var cssText = document.createTextNode(cssString);
  114.             style.appendChild(cssText);
  115.         }

  116.         var heads = document.getElementsByTagName("head");
  117.         if (heads.length) {
  118.             heads[0].appendChild(style);
  119.         } else {
  120.             document.documentElement.appendChild(style);
  121.         }
  122.     };

  123.     /**
  124.      * 作用: 扩展url的参数
  125.      * @param {string} url 需要扩展参数的地址
  126.      * @param {json} obj 要添加到url中的参数
  127.      * @returns {String} 添加参数后的url字符串
  128.      */
  129.     thinkHelper.addQueryParams = function (url, obj) {
  130.         var joinChar  = (url.indexOf('?') === -1) ? '?' : '&';
  131.         var arrParams = [];
  132.         for (var key in obj) {
  133.             arrParams.push(key + '=' + encodeURIComponent(obj[key]));
  134.         }
  135.         return url + joinChar + arrParams.join('&');
  136.     };

  137.     /**
  138.      * 作用: 发送jsonp请求
  139.      * @param {string} url 请求地址
  140.      * @param {function} success 成功返回执行的处理函数
  141.      * @param {function} error 失败执行的处理函数
  142.      * @returns {undefined}
  143.      */
  144.     thinkHelper.jsonp = function (url, success, error) {
  145.         var error        = error ? error : thinkHelper.emptyFunc;
  146.         var callback     = 'callback_' + Math.random().toString().replace('.', '_');
  147.         window[callback] = success;
  148.         url              = thinkHelper.addQueryParams(url, {
  149.             callback: callback
  150.         });
  151.         thinkHelper.getScript(url).error(error);
  152.     };

  153.     /**
  154.      * 作用: 根据dom获取对应广告位代码
  155.      * @param {documentElement} thinkAdDom dom对象
  156.      * @returns {undefined}
  157.      */
  158.     thinkHelper.setAd = function (thinkAdDom) {
  159.         var api = thinkAdConfig.api + '/' + thinkAdDom.id;
  160.         thinkHelper.jsonp(api, function (data) {
  161.             if (typeof data !== 'object' || !data.on) {
  162.                 thinkAdDom.parentNode.removeChild(thinkAdDom);
  163.                 return;
  164.             }
  165.             thinkAdDom.style.display = 'block';
  166.             // 设置宽度
  167.             if (data.width) {
  168.                 thinkAdDom.style.width = data.width + 'px';
  169.             }
  170.             // 设置宽度
  171.             if (data.height) {
  172.                 thinkAdDom.style.height = data.height + 'px';
  173.             }
  174.             thinkAdDom.style.overflow = 'hidden';

  175.             // 广告位css文件和css代码和载入
  176.             if (data.css_file) {
  177.                 var cssFiles = data.css_file.split('|');
  178.                 for (var i in cssFiles) {
  179.                     thinkHelper.getStyle(cssFiles[i]);
  180.                 }
  181.             }
  182.             // css code
  183.             if (data.css_code) {
  184.                 thinkHelper.addCssString(data.css_code);
  185.             }

  186.             // 如果包含replace="true"就替换掉think标签, 负责在标签内填充模板
  187.             if (thinkAdDom.getAttribute('replace') == 'true') {
  188.                 var tempDom       = document.createElement("div");
  189.                 tempDom.innerHTML = data.html;
  190.                 if (tempDom.childNodes.length) {
  191.                     for (var i = 0; i < tempDom.childNodes.length; i++) {
  192.                         thinkAdDom.parentNode.insertBefore(tempDom.childNodes[i], thinkAdDom);
  193.                     }
  194.                 }
  195.                 thinkAdDom.parentNode.removeChild(thinkAdDom);
  196.             } else {
  197.                 thinkAdDom.innerHTML = data.html;
  198.             }

  199.             // 广告位js文件载入
  200.             var isJsFileOk = false;
  201.             if (data.js_file) {
  202.                 var jsFiles     = data.js_file.split('|');
  203.                 var jsFileCount = 0;
  204.                 for (var i in jsFiles) {
  205.                     thinkHelper.getScript(jsFiles[i]).success(function () {
  206.                         jsFileCount++;
  207.                         if (jsFileCount >= jsFiles.length) {
  208.                             isJsFileOk = true;
  209.                         }
  210.                     });
  211.                 }
  212.             } else {
  213.                 isJsFileOk = true;
  214.             }
  215.             var n = setInterval(function () {
  216.                 if (isJsFileOk) {
  217.                     clearInterval(n);
  218.                     eval('(function(){try{' + data.js_code + '}catch(e){}})();');
  219.                 }
  220.             }, 100);
  221.         });
  222.     };

  223.     var st    = null;
  224.     var num   = 0;
  225.     var parse = {};
  226.     // 延时处理广告标签, 解决js找不到dom的问题
  227.     var _loop = function () {
  228.         if (num < 50) {

  229.             (function () {
  230.                 // 很老很老的版本
  231.                 var thinkAds = document.getElementsByTagName('thinkad');
  232.                 for (var i = 0; i < thinkAds.length; i++) {
  233.                     if (!parse[thinkAds[i].id]) {
  234.                         parse[thinkAds[i].id] = 1;
  235.                         thinkAds[i].setAttribute('parse', 1);
  236.                         thinkHelper.setAd(thinkAds[i]);
  237.                     }
  238.                 }
  239.             })();

  240.             (function () {
  241.                 // 新版本
  242.                 var thinkAds = document.getElementsByTagName('think');
  243.                 for (var i = 0; i < thinkAds.length; i++) {
  244.                     if (!parse[thinkAds[i].id]) {
  245.                         parse[thinkAds[i].id] = 1;
  246.                         thinkAds[i].setAttribute('parse', 1);
  247.                         thinkHelper.setAd(thinkAds[i]);
  248.                     }
  249.                 }
  250.             })();

  251.             num++;
  252.         } else {
  253.             parse = null;
  254.             clearInterval(st);
  255.         }
  256.     };

  257.     st = setInterval(_loop, 200);
  258. })();
复制代码
http://e.topthink.com/api/basic/ad_bd568ce7058a1091?callback=callback_0_4090405453099466&_t=0.04540030947165552




  1. callback_0_4090405453099466({"css_file":"","css_code":".think_default_text a:hover{\r\n       border: 0;\r\n}","js_file":"","js_code":"","on":true,"html":"<div class="think_default_text">\r\n<a href="https:\/\/e.topthink.com\/api\/go\/ad_ed577e30784a38b0" title="5.0\u65b0\u624b\u5165\u95e8\u7cfb\u5217" target="_blank">5.0\u65b0\u624b\u5165\u95e8\u7cfb\u5217<\/a><span style=" padding-left: 10px;"><\/span><a href="https:\/\/e.topthink.com\/api\/go\/e9360ed416ef55e38" title="\u963f\u91cc\u73cd\u8d35\u6280\u672f\u8d44\u6599\u514d\u8d39\u4e0b\u8f7d" target="_blank">\u963f\u91cc\u73cd\u8d35\u6280\u672f\u8d44\u6599\u514d\u8d39\u4e0b\u8f7d<\/a><span style=" padding-left: 10px;"><\/span><\/div>"});
复制代码



捡代码论坛-最全的游戏源码下载技术网站! - 论坛版权郑重声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与捡代码论坛-最全的游戏源码下载技术网站!享有帖子相关版权
3、捡代码论坛版权,详细了解请点击。
4、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。
5、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。 我们不承担任何技术及版权问题,且不对任何资源负法律责任。
6、如无法链接失效或侵犯版权,请给我们来信:jiandaima@foxmail.com

回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立 即 注 册

本版积分规则

技术支持
在线咨询
QQ咨询
3351529868

QQ|手机版|小黑屋|捡代码论坛-专业源码分享下载 ( 陕ICP备15015195号-1|网站地图

GMT+8, 2024-3-28 23:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表