// @TODO 临时应对劫持 by dexteryy /* 
var _write = _doc.write, 
_white_list = { 'douban.com': 1, 'douban.fm': 1, 'google.com': 1, 'google-analytics.com': 1, 'googleadservices.com': 1 }, 
// 统计劫持情况 _hijack_stat = function(reason, env){ var img = new Image(); img.onload = function(){}; img.src = "http://www.douban.com/j/except_report?kind=ra022&reason=" + encodeURIComponent(reason) + "&environment=" + encodeURIComponent(env); }, 
_RE_SCRIPTS = /]+)/ig, _RE_DOMAIN = /(.+?)\.([^\/]+).+/; 
_doc.write = function(str){ try { var s, safes = [], unkowns = []; while (s = _RE_SCRIPTS.exec(str)) { if (_white_list[(_RE_DOMAIN.exec(s) || [])[2]]) { safes.push(s); } else { unkowns.push(s); } } if (unkowns.length > 0) { _hijack_stat([unkowns[0], safes[0] || ""].join("~_~"), location.href); } try { _write.call(this, str); } catch (ex) { _write(str); } } catch (ex) { _write(str); _hijack_stat(ex.name + ":" + ex.message, location.href); } }; */ })(); 

解决方案 »

  1.   

    我大致看懂了一些,
    _RE_SCRIPTS = /]+)/ig:这个正则表达式匹配javascript脚本
    _RE_DOMAIN = /(.+?)\.([^\/]+).+/:这个正则表达式是匹配域名
     if (_white_list[(_RE_DOMAIN.exec(s) || [])[2]]) { safes.push(s); } else { unkowns.push(s); }如果匹配的域名是安全域名比如douban.com,那么_white_list[douban.com]=1,那么safes.push(s),否则unkowns.push(s)
    if (unkowns.length > 0) { _hijack_stat([unkowns[0], safes[0] || ""].join("~_~"), location.href); } 如果有不安全的域名,就会向http://www.douban.com/j/except_report这个页面报告
    但是一些具体的地方我还是看不懂:
    _RE_DOMAIN = /(.+?)\.([^\/]+).+/这个正则表达式是如何匹配域名的
    _white_list[(_RE_DOMAIN.exec(s) || [])[2]]里面的 || [])[2]]是什么意思
    [unkowns[0], safes[0] || ""].join("~_~")里面的或操作是什么意思