[JS] 靜态輸出的評論也顯示UA

就像本站的本地評論一樣。 雖然,本地評論我修改了後台程序,一樣存儲了評論者 Useragent 。但是除非 JS 方式顯示。 不然默認是不會顯示的。

原因很簡單。 本站解析 UA 是用的這個JS庫,而非後台的 Perl 程序。 而本站的本地評論現在顯示是動靜結合的。 簡單的說,每篇文章都是一個靜态的HTML頁面,定期更新評論在這個頁面上。同時JS載入評論,進行判斷是否寫入靜态頁面并動态更新之。 顯然靜态頁面解析不可能對 Useragent 字符串進行處理。 而路楊并不像完全對靜态評論進行JS替換。。 複雜的的辦法就是在後台用 Perl 再寫一個解析 UA 的程序出來作為靜态HTML的 UA 解析輸出。但是 UA 的構造太雜亂了。。。。

今天想了想,其實很簡單,還是前段解決吧。 一個 JQ each搞定。 代碼如下:

code$("span[rel='ua']").each(function(){  
     if ( $(this).hasClass("done") ) return;       
       var $el = $(this).closest(".comment");
       var _id= $el.attr("data-comment-id"); 
       $(this).replaceWith(tt.show_ua_by_id(_id))
        // $(this).html( tt.show_ua_by_id(_id) ).addClass("done").removeAttr("rel");
});

tt.show_ua_by_id() 代碼片段如下:

codeshow_ua_by_id:  function(idx){
  var s = json_data.comments[idx];
  if (!s) return '';  
  if (s.agent) return  tt.show_ua(s.agent);
  return '';    
},

而靜态網頁在要顯示 UA 的位置加入 <span rel="ua"></span> 就一切OK了。

上面的 JS 都是片段, 完整可以查看本站 評論JS:../../js/new_mt_comments.js

記錄下來,給自己備忘。