帶你制作百詞斬單詞表讀寫插件

? ? ? ?上篇博文簡單的介紹了一下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插件開發文檔。也參照了一些樣例,感覺非常不錯。去這里能夠下載到。


? ? ? ?做出來以后,發現插件的確非常不錯,能夠自由擴展,屬于本地個性化設計。值得學習一下。


轉載于:https://www.cnblogs.com/zfyouxi/p/5180358.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396829.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396829.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396829.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux7改運行級別,Centos7.0修改系統運行級別

首先翻譯下ininttab里面的內容:#inittab不再使用時利用系統。#添加配置這會對你的系統沒有影響。#Ctrl-Alt-Delete由/usr/lib系統/系統/ctrl-alt-del.target處理#系統使用的目標而不是運行級別。默認情況下,有兩個主要目標:#multi-user.targe…

python測試字符串類型的函數_python-02 數據類型 字符串str

字符串str 一、字符串定義 概念:字符串是有序的 不可修改的,元素以引號包圍的序列 引號類型:單引號 “”雙引號 “ ””三引號 三單引號 print(python) print("python") print(python) print("""python""…

POJ2115 C Looooops(線性同余方程)

無符號k位數溢出就相當于mod 2k&#xff0c;然后設循環x次A等于B&#xff0c;就可以列出方程&#xff1a; $$ CxA \equiv B \pmod {2^k} $$ $$ Cx \equiv B-A \pmod {2^k} $$ 最后就用擴展歐幾里得算法求出這個線性同余方程的最小非負整數解。 1 #include<cstdio>2 #incl…

工作測試博客

工作測試博客轉載于:https://blog.51cto.com/12559670/1895000

iphone各機型參數對比_帶你了解新款iPhone 12系列四款機型

2020年10月14日凌晨1&#xff1a;00&#xff0c;蘋果召開新品發布會&#xff0c;發布了新款iPhone 12系列手機&#xff0c;“果粉”們期待已久的iPhone 12終于來了。iPhone 12系列手機共有四款機型&#xff0c;分別是iPhone 12 mini、iPhone 12、iPhone 12 Pro、iPhone 12 Pro …

設置開機自啟動服務

一、軟鏈接方法 利用ln -s 命令將/etc/rc.d/init.d/目錄下腳本&#xff08;注意執行權限&#xff09;軟連接到 rc3目錄下&#xff0c;/etc/rc.d/rc3.d 目錄也就是我們一般的系統運行級別。ln -s /etc/rc.d/init.d/** /etc/rc.d/rc3.d/S**這里的S代表的是開機自啟動服務&#x…

mysql benchmark基準測試

git項目地址&#xff1a; https://github.com/akopytov/sysbench 利用sysbench很容易對mysql做性能基準測試&#xff08;當然這個工具很強大&#xff0c;除了測試主流數據庫性能&#xff0c;還能測試其它方面&#xff0c;詳情自己看官網項目文檔&#xff09; mac上的用法&#…

高并發第一彈:準備階段 了解高并發

高并發第一彈:準備階段 了解高并發 首先需要知道什么并發, 什么是高并發. 并發: 關于并發的學習&#xff0c;可以從JDK提供的并發包為核心開始&#xff0c;許多其他的類和封裝都是對其進行擴展或者補充&#xff0c;我們來看一下Java并發包(java.util.concurrent包&#xff0c;簡…

matlab立體坐標定位_【半導光電】基于光電探測器的激光章動定位算法(二)

今日光電有人說&#xff0c;20世紀是電的世紀&#xff0c;21世紀是光的世紀&#xff1b;知光解電&#xff0c;再小的個體都可以被賦能。歡迎來到今日光電&#xff01;----與智者為伍 為創新賦能----1. 章動定位算法實驗前&#xff0c;首先需要對光路進行調節&#xff0c;保證經…

linux系統死機窗口移動不了怎么辦,Linux 操作系統死機故障處理方法總結

hai00882008-01-30 15:53我只備份一次,我的磁帶有400G, 備份第二次,磁帶就彈出來,我的tapelist里的內容 20080130151855 DailySet1-01 reuse是不是和我的anmanda.conf的chg-manua(更換磁帶的腳本)l這個腳本有關係,-sh-3.00$ amcheck DailySet1Amanda Tape Server Host Check---…

Android:支持多選的本地相冊

前段時間在做一個動態發布功能&#xff0c;需要用到圖片上傳。一開始直接調用的系統相冊和相機&#xff0c;由于系統相機不支持多選&#xff0c;就花點時間做了個本地相冊&#xff0c;在此開源下。 先上截圖&#xff0c;依次為選擇相冊界面、相冊詳情界面、查看圖片大圖界面 相…

心靈與大腦

2019獨角獸企業重金招聘Python工程師標準>>> http://blog.sina.com.cn/s/blog_6f034fc30102f2tg.html 轉載于:https://my.oschina.net/chirnson/blog/832011

python入門心得_記初學python的一些心得

人生苦短&#xff0c;我用python&#xff01; 其實我自學python也很長一段時間了&#xff0c;但總是去更換學習資料&#xff0c;搞的現在學的不是很好&#xff0c;因為沒更換次資料都要從頭開始學起&#xff0c;那么分享下我的學習戰況吧&#xff0c;不是很好&#xff0c;還將就…

羅技鍵盤linux,logiops,在 Linux下設置羅技鼠標的按鍵和手勢

眾所周知&#xff0c;幾乎所有的消費級電子產品都不會對 Linux 有太好的支持&#xff0c;羅技當然也不例外。Logitech Options 是羅技辦公鼠標的自定義功能驅動&#xff0c;很容易猜到&#xff0c;羅技只提供了Windows和Mac版本。但幸運的是&#xff0c;有人開發出了一個第三方…

16.U-boot的工作流程分析-2440

16.U-boot的工作流程分析-2440 分析的流程&#xff1a; 程序入口 第一階段程序分析 第二階段程序分析 2440開發板&#xff1a; 1.uboot的入口&#xff1a; 要看uboot工程的入口&#xff0c;首先打開頂層目錄的Makefile&#xff1a; Uboot所支持的開發板&#xff0c;在頂層的Ma…

linux增加調整虛擬內存

增加虛擬內存&#xff1a;1、檢查當前的分區情況:# free -m2、增加交換分區文件及大小&#xff0c;如果要增加1G大小的交換分區&#xff0c;則命令寫法如下&#xff0c;其中的 bs等于想要的塊大小&#xff0c;count是要增加多少塊&#xff0c;虛擬內存的大小等于bs*count# dd i…

linux練習手冊,Linux操作習題集(1)

動動手實作題&#xff1a;假設你不知道你的主機內部的各項元件資料&#xff0c;請拆開你的主機機殼&#xff0c;並將內部所有的元件拆開&#xff0c;並且依序列出&#xff1a;CPU的廠牌、型號、最高時脈&#xff1b;主記憶體的容量、介面 (DDR/DDR II等)&#xff1b;顯示卡的介…

如何使用Redis做MySQL的緩存

應用Redis實現數據的讀寫&#xff0c;同時利用隊列處理器定時將數據寫入mysql。 同時要注意避免沖突&#xff0c;在redis啟動時去mysql讀取所有表鍵值存入redis中&#xff0c;往redis寫數據時&#xff0c;對redis主鍵自增并進行讀取&#xff0c;若mysql更新失敗&#xff0c;則需…

MySQL中CREATE DATABASE和CREATE SCHEMA區別(轉)

在使用MS SQL的時候&#xff0c;一般創建數據庫我們都習慣于使用CREATE DATABASE 來完成&#xff0c;而使用CREATE SCHEMA來創建架構&#xff0c;但是在MySQL中&#xff0c;官方的中文文檔在 CREATE DATABASE 語法一節中寫了一句&#xff1a;也可以使用CREATE SCHEMA。那么CREA…

psychopy 與腦電打碼 eeg

2019獨角獸企業重金招聘Python工程師標準>>> 實驗程序就不放了&#xff0c;這里主要放如何向串口發送打碼的代碼 實際上&#xff0c;給腦電打碼的本質就是向串口發送一個字符&#xff0c;腦電的程序會自動在收到該字符的同時在腦電數據上進行標記。以下代碼打開了一…