? ? ? ?上篇博文簡單的介紹了一下Chrome插件,今天就與大家分享一下我做的這款有實際意義的插件吧。
? ? ? ?做這款插件主要是用百詞斬站點進行單詞學習時,遇到的一點點鬧心事兒。在單詞表中不能聽發音。也不能練習拼寫。所以才忍無可忍的做了這么一款插件。自我感覺還是非常不錯的。
? ? ? 先來看看效果吧:
(原站點格式)
(安裝插件后。多了一個button)
(點擊change model后的效果,可顯隱單詞,可聽發音。可檢測拼寫,看動畫效果)
? ? ? ?做這個插件,主要應用了content script與頁面進行交互的。manifest.json內容例如以下:
{"name": "百詞斬測試插件","version": "1.0.0.0","manifest_version": 2,"background": {"page": "background.html"},"permissions": ["http://*/"],"icons": {"16":"images/icon_16.png","128":"images/icon_128.png"},"description": "百詞斬測試插件。信息技術提高班 八期 龍軒出品","content_scripts": [{"all_frames": true,"matches": ["http://www.baicizhan.com/user/words/list*"],"js": ["js/jquery-1.7.2.min.js","js/content_script.js","js/background.js"]}]
}
? ? ? ?最關鍵的就是content_script節點,當中全部的功能都是用js在后臺完畢的。而matches則是設置匹配模式,規定遇到哪些頁面會自己主動運行代碼。
其它的就比較簡單了,直接寫jquery命令就可以,如改動頁面寬度:
//改動css樣式
function csschange(){$(".user-word-list-block").css("width","1000px");$(".w950").css("margin-left","175px");
}
? ? ? ?當中有點難度的就是往頁面注入js代碼,我用jquery嘗試了N多次,都不能成功。插進去的js都是文本狀態,不能運行。
最終使用原生的js操作成功了,代碼例如以下:
function fun1(){//....}
function fun2(){//....}//將js代碼增加到頁面的head節點中
function addscript(prefix,f,suffix){var script = document.createElement("script");script.type="text/javascript";script.innerHTML=prefix+eval(f)+suffix; document.head.appendChild(script);
}//注入fun1函數
addscript("",fun1,"");//注入fun2函數,并自啟動
addscript("(",fun2,")();");
? ? ? ?當然也直接設置控件的事件為function的對象,當然也須要用原生js寫:
function fun1(){//...}//往指定節點中加入a標簽,并設置onclick對象
function addLable_A(name, fun,node) {var a = document.createElement("a");a.innerText = name;a.href="#";a.onclick = fun;node.appendChild(a);
}//向class為btn-start-review的第一個元素中插入a標簽,并設定onclick事件
addLable_A("Change Model",fun1,document.getElementsByClassName("btn-start-review")[0])
? ? ? ?加入這些都是小事兒。主要是分析單詞發音的網址。
因為手頭沒有可用的http抓包分析工具,所以點擊了n多次,然后用谷歌的開發工具挨個分析請求,并通過n多實驗。最終能夠拿到全部的單詞具體記錄,包含解釋、音標、例句、例句中單詞信息、圖片以及單詞和句子的音頻地址。
可是都拿到的話會花費非常長時間。只是看到單詞發音是有規律的,所以僅僅做了發音的鏈接。
音頻地址規則為:
http://baicizhan0.qiniudn.com/word_audios/+單詞+.mp3
? ? ? ?音頻地址能夠拼出來。可是卻沒有一個能夠播放的,在網上找了一些代碼,卻發現Chrome上不能播放,可是ie就沒有問題(提示有activex控件,可能須要media player才行)。可是百詞斬本身在chrome上是能夠播放的,所以經過幾番周折,最終分析出它自己寫了一個soundmanager來完畢播放操作,我直接把newsoundmanager的方法那過來直接載入進來就能夠用了,調用create創建。play播放,destroy銷毀。代碼例如以下:
//生成音樂播放器
function t() {1 != window.isSoundManagerLoading && 1 != window.isSoundManagerLoaded && (window.isSoundManagerLoading = !0, window.SM2_DEFER = !0, $.cachedScript("http://assets1.baicizhan.com/pack/soundmanager2-nodebug-jsmin.js").done(function() {window.soundManager = new SoundManager;var t = {url: "/sound_manager/",debugMode: !1,debugFlash: !1,useFlashBlock: !1,useHighPerformance: !0,noSWFCache: !0,onready: function() {window.isSoundManagerLoaded = !0, window.isSoundManagerLoading = !1}};navigator.userAgent.toLowerCase().match(/(iphone|ipod|ipad)/) && (t.preferFlash = !1), soundManager.setup(t), soundManager.beginDelayedInit()}))
}//播放單詞讀音
function wordvoiceplay(field){var file="http://baicizhan0.qiniudn.com/word_audios/"+field+".mp3";//創建音樂播放soundManager.createSound({id: 'word-audio-'+field,url:file,autoPlay: !1,autoLoad: !1}).play();//設置1秒后自己主動銷毀音頻對象setTimeout(function(){soundManager.destroySound('word-audio'+field);},1000);
}
? ? ? ?在制作的過程中,主要遇到了這么幾個小問題,主要借鑒了自稱非官方的文檔和360chrome插件開發文檔。也參照了一些樣例,感覺非常不錯。去這里能夠下載到。
? ? ? ?做出來以后,發現插件的確非常不錯,能夠自由擴展,屬于本地個性化設計。值得學習一下。