。很多時候你可能會想在Google裡面搜尋一下你的文章是否被别人轉載了,如果每次都要把标題複制到Google裡再搜,真是麻煩得要死。GoogleTrack就是會自動地把搜尋連接配接生成,然後你隻需要點選連結就可以跟蹤你自己的文章的功能。
本來這個腳本注入做的是比較的麻煩,因為部落格園的文章在顯示的時候會自動過濾掉裡面<script> ...
</script>,但是如果是<tag onclick="javascript:
..."></tag>這樣的腳本卻是可以被保留的。正好這個是必須保留的,否則動态折疊代碼的功能就是使用不了了
。以至我開始制作這個注入就是按不能使用<script>來做的,才搞得比較麻煩。
如上所說,我使用HTML
Object事件屬性來内連代碼。為了讓代碼自動執行,必須使用onload一類的屬性,有onload屬性的element還不少,看看覺得使用IMG是比較好的,于是使用<img
onload="...">來作為代碼注入的執行點起點。可是這個時候問題又來了,如果我引用的image裝載的很快,那麼它的onload很有可能比document的onload早執行,那個時候頁面都沒有裝載完畢,注入很容易出錯的說。
是以在IMG的onload裡是不能做真正的執行注入的邏輯的,而把注入的執行挂到document的onload事件上,因為<script>對象一但被append進文檔就會load其src所指向的腳本檔案。注入代碼如下:
<img src="http://zhilee.aehk.com/Archive/Images/25.gif"
style="width:0; height:0" onload="
function JudgeInject()
{
var injected = false;
var scripts = document.getElementsByTagName('SCRIPT');
for ( var i=0 ; i < scripts.length ; ++i )
{
var script = scripts[i];
var fileName = script.src;
fileName = fileName.substr(fileName.lastIndexOf('/'));
if ( fileName == '/GoogleTrack.js' )
{
injected = true;
break;
}
}
if ( !injected )
var __script__ = document.createElement('SCRIPT');
document.body.appendChild(__script__);
__script__.src = "http://zhilee.aehk.com/Archive/JScript/GoogleTrace.js";
}
document.body.onload = JudgeInject;
">
其實本來可以把檔案都放在cnblogs的伺服器上,那樣效果會更好,因為伺服器的傳輸速率就是一樣的,會少些異步操作代來的問題,我有空再來移圖檔和代碼了。
腳本GoogleTrack.js是用來處理具體的注入邏輯的,它依賴于部落格園文章的顯示格式,然後都是一些DHTML的操作而以,沒啥難的,代碼如下(也可以直接用上面代碼中的url下載下傳):
InjectComponents();
function InjectComponents()
var imgPath = 'http://zhilee.aehk.com/Archive/Images/';
var posts = document.getElementsByTagName('H5');
var imgSrc = imgPath + 'GoogleTrack-s.gif';
if ( !posts || posts.length == 0 )
for ( var i=0 ; i < posts.length ; ++i )
怎麼用?! 對了,怎麼用呢?把第一段代碼加到Configure的"公告"裡就行了:) 我都做完後我才發現,公告裡面是支援<script> ... </script>,早知道我就不這麼折騰了,代碼都放公告裡就的了
。
頁面注入GoogleTrack後的效果:
enjoy it!
本文轉自部落格園鳥食軒的部落格,原文連結:http://www.cnblogs.com/birdshome/,如需轉載請自行聯系原部落客。