360浏览器、chrome开发扩展插件教程(2)为html添加行为

简介:

上一节我们已经讲了Chrome扩展的基础知识,并构建了基础的html,这一节我们将就html DOM添加部分添加脚本,即脚本在我们的popup页面中进行的操作,页面所产生的变化。

正常情况下数据处理加载完成状态,这些数据是从本地数据读取的。

点击“添加新项”,出现输入框,输入文字后回车提交数据:

添加完成后将数据存储,同时添加DOM元素:

考虑到功能最简化处理,点击已标为完成的任务,将提示“删除或重置为未完成”:

以上功能为最核心功能,可以在此基础上进行扩展,比如任务分组,修改任务,任务提醒,网络同步数据等等。

下面开始相应的脚本内容。

为了避免全局变量,使用匿名函数方式,所有事件处理及数据绑定均在此函数中进行,同时定义与jQuery中的$()类似的函数:

( function (){
     var  $= function (id){ return  document.getElementById(id);}
})();

建立Tasks对象,定义show()函数和hide()函数,同时存储几个常用的DOM对象。

var  Tasks = {
   show: function (obj){
     obj.className= '' ;
     return  this ;
   },
   hide: function (obj){
     obj.className= 'hide' ;
     return  this ;
   },
   //存储dom
   $addItemDiv:$( 'addItemDiv' ),
   $addItemInput:$( 'addItemInput' ),
   $txtTaskTitle:$( 'txtTaskTitle' ),
   $taskItemList:$( 'taskItemList' )
}

其中show()函数和hide()函数均使用了链式调用,每次执行此函数均会返回对象本身,这样对象就可以使用形如类似jQuery书写方式来使用此函数。

然后注册事件:

//.....
//初始化
init: function (){
     /*注册事件*/
     //打开添加文本框
     Tasks.$addItemDiv.addEventListener( 'click' , function (){
         Tasks.show(Tasks.$addItemInput).hide(Tasks.$addItemDiv);
         Tasks.$txtTaskTitle.focus();
     }, true );
     //回车添加
     Tasks.$txtTaskTitle.addEventListener( 'keyup' , function (ev){
         var  ev=ev || window.event;
         if (ev.keyCode==13){
             //TODO:写入本地数据
             Tasks.AppendHtml(task);
             Tasks.$txtTaskTitle.value= '' ;
             Tasks.hide(Tasks.$addItemInput).show(Tasks.$addItemDiv);
         }
         ev.preventDefault();
     }, true );
     //取消
     Tasks.$txtTaskTitle.addEventListener( 'blur' , function (){
         Tasks.$txtTaskTitle.value= '' ;
         Tasks.hide(Tasks.$addItemInput).show(Tasks.$addItemDiv);
     }, true );
     //TODO:初始化数据,加载本地数据,生成html         
},
//....

其中待完成部分为我们下一节将重点计到的html5的本地存储功能。再定义数据操作部分,先写上空白函数:

//....
//增加
Add: function (){
     //TODO
},
//修改
Edit: function (){
     //TODO
},
//删除
Del: function (){
     //TODO
},
//...

还需要初始化此函数使其执行并让匿名函数执行:

( function (){
     var  Tasks = {
//***
     }
     Tasks.init();
})();

好吧,以下就是本节中所要提到的全部代码:

( function (){
     var  $= function (id){ return  document.getElementById(id);}
     var  Tasks = {
         show: function (obj){
             obj.className= '' ;
             return  this ;
         },
         hide: function (obj){
             obj.className= 'hide' ;
             return  this ;
         },
         //存储dom
         $addItemDiv:$( 'addItemDiv' ),
         $addItemInput:$( 'addItemInput' ),
         $txtTaskTitle:$( 'txtTaskTitle' ),
         $taskItemList:$( 'taskItemList' ),
         //初始化
         init: function (){
             /*注册事件*/
             //打开添加文本框
             Tasks.$addItemDiv.addEventListener( 'click' , function (){
                 Tasks.show(Tasks.$addItemInput).hide(Tasks.$addItemDiv);
                 Tasks.$txtTaskTitle.focus();
             }, true );
             //回车添加
             Tasks.$txtTaskTitle.addEventListener( 'keyup' , function (ev){
                 var  ev=ev || window.event;
                 if (ev.keyCode==13){
                     //TODO:写入本地数据
                     Tasks.AppendHtml(Tasks.$txtTaskTitle.value);
                     Tasks.$txtTaskTitle.value= '' ;
                     Tasks.hide(Tasks.$addItemInput).show(Tasks.$addItemDiv);
                 }
                 ev.preventDefault();
             }, true );
             //取消
             Tasks.$txtTaskTitle.addEventListener( 'blur' , function (){
                 Tasks.$txtTaskTitle.value= '' ;
                 Tasks.hide(Tasks.$addItemInput).show(Tasks.$addItemDiv);
             }, true );
             //TODO:初始化数据,加载本地数据,生成html         
         },
         //增加
         Add: function (){
             //TODO
         },
         //修改
         Edit: function (){
             //TODO
         },
         //删除
         Del: function (){
             //TODO
         },
         AppendHtml: function (title){
             var  oDiv=document.createElement( 'div' );
             oDiv.className= 'taskItem' ;
             var  oLabel=document.createElement( 'label' );
             oLabel.className= 'on' ;
             var  oSpan=document.createElement( 'span' );
             oSpan.className= 'taskTitle' ;
             var  oText=document.createTextNode(title);
             oSpan.appendChild(oText);
             oDiv.appendChild(oLabel);
             oDiv.appendChild(oSpan);
             //注册事件
             oDiv.addEventListener( 'click' , function (){
                 //TODO
             }, true );
             Tasks.$taskItemList.appendChild(oDiv); 
         },
         RemoveHtml: function (){
             //TODO
         }
     }
     Tasks.init();
})();

代码中尚未实现的部分,我们将会在下节详细讲解其实现。




本文转自黄聪博客园博客,原文链接:http://www.cnblogs.com/huangcong/p/3531725.html,如需转载请自行联系原作者

相关文章
|
2月前
|
移动开发 Java API
HTML 插件详解
HTML中的插件如Flash、Java applets和ActiveX控件曾广泛用于扩展网页功能,但因安全性问题和跨浏览器兼容性不佳而逐渐被淘汰。现代替代方案包括HTML5的`<audio>`、`<video>`、`<canvas>`和SVG等,以及WebAssembly和各种JavaScript API(如WebRTC和WebGL),这些新技术不仅提升了网页性能和安全性,还改善了用户体验。建议开发者优先采用HTML5和相关API。
|
1月前
利用html2canvas插件自定义生成名片信息并保存图片
这是一个利用html2canvas插件自定义生成名片信息并保存图片,自定义上传头像,自定义输入个人信息内容,自定义图片名称,并将生成的图片保存到本地
37 1
利用html2canvas插件自定义生成名片信息并保存图片
|
1月前
|
Web App开发 搜索推荐 安全
|
5月前
WordPress插件介绍页源码单页Html源码
WordPress插件介绍页源码单页Html源码
70 2
WordPress插件介绍页源码单页Html源码
|
5月前
|
存储 缓存 边缘计算
高并发架构设计三大利器:缓存、限流和降级问题之控制浏览器缓存的行为问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之控制浏览器缓存的行为问题如何解决
|
5月前
|
人工智能 前端开发 JavaScript
HTML 【实用教程】(2024最新版)
HTML 【实用教程】(2024最新版)
50 0
|
5月前
|
JavaScript 前端开发 物联网
文本,Vue实现打印的方式,打印机的种类有多少,浏览器打印html,右键,2打印插件,3指令打印,vue-print-nb
文本,Vue实现打印的方式,打印机的种类有多少,浏览器打印html,右键,2打印插件,3指令打印,vue-print-nb
|
6月前
|
Python
Python基础教程(第3版)中文版 第20章 项目1: 自动添加标签(纯文本转HTML格式) (笔记2)
Python基础教程(第3版)中文版 第20章 项目1: 自动添加标签(纯文本转HTML格式) (笔记2)
|
6月前
|
Python
Python基础教程(第3版)中文版 第20章 项目1: 自动添加标签(纯文本转HTML格式) (笔记)
Python基础教程(第3版)中文版 第20章 项目1: 自动添加标签(纯文本转HTML格式) (笔记)
|
3月前
|
Web App开发 数据采集 存储
WebDriver与Chrome DevTools Protocol:如何在浏览器自动化中提升效率
本文探讨了如何利用Chrome DevTools Protocol (CDP) 与 Selenium WebDriver 提升浏览器自动化效率,结合代理IP技术高效采集微博数据。通过CDP,开发者可直接操作浏览器底层功能,如网络拦截、性能分析等,增强控制精度。示例代码展示了如何设置代理IP、cookie及user-agent来模拟真实用户行为,提高数据抓取成功率与稳定性。适用于需要频繁抓取互联网数据的应用场景。
520 3
WebDriver与Chrome DevTools Protocol:如何在浏览器自动化中提升效率