带你制作百词斩单词表读写插件

       上篇博文简单的介绍了一下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.mzph.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;脑电的程序会自动在收到该字符的同时在脑电数据上进行标记。以下代码打开了一…