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月前
|
Web App开发 人工智能 IDE
从痛点到解决方案:为什么我开发了Chrome元素截图插件
传统的截图方式要么截取整个页面然后手动裁剪,要么使用浏览器自带的截图功能,但效果都不理想。特别是当内容包含SVG元素或复杂样式时,截图质量和速度、便捷性往往不尽如人意。
171 4
|
2月前
|
Web App开发 人工智能 前端开发
产品发布策略:如何让Chrome插件在竞争激烈的市场中脱颖而出
Chrome Web Store每天新增很多个插件。插件刚发布,用户只有我自己,如何在这样的红海市场中找到自己的位置,是我一直在思考的问题。
115 0
|
7月前
|
Web App开发 安全 iOS开发
基于PyCharm与Mac系统的Chrome历史记录清理工具开发实战
《基于PyCharm与Mac系统的Chrome历史记录清理工具开发实战》详细解析了如何在macOS下通过Python脚本自动化清理Chrome浏览器的历史记录。文章以`clear_chrome_history.py`为例,结合PyCharm开发环境,深入讲解技术实现。内容涵盖进程检测、文件清理、虚拟环境配置及断点调试技巧,并提供安全增强与跨平台适配建议。该工具不仅保障个人隐私,还适用于自动化运维场景,具备较高实用价值。
217 0
|
3月前
|
Web App开发 搜索推荐 安全
火狐(Mozilla Firefox)浏览器安装教程,附火狐(Mozilla Firefox)安装包
火狐浏览器2025年8月最新版141.0.2发布,支持Windows、Mac、安卓系统,运行速度快,安全性高。提供离线安装包下载,支持多种网络标准,个性化定制功能丰富,安装简便,可自定义安装路径并恢复上次浏览标签,带来更流畅上网体验。
1488 6
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
381 1
|
10月前
|
Web App开发 人工智能 JSON
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
AutoMouser是一款Chrome扩展程序,能够实时跟踪用户交互行为,并基于OpenAI的GPT模型自动生成Selenium测试代码,简化自动化测试流程。
709 17
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
|
10月前
|
Web App开发 存储 开发者
Chrome 插件上架发布全流程指南
浏览器插件开发完以后,要发布到 Chrome Web Store上,也是需要颇费一番周折的,本文就从注册账号开始,一直到最后发布上架的全流程进行指导,希望帮助你提供一些经验,避免踩坑,耗时耗力。
963 8
|
10月前
|
Web App开发 数据采集 JavaScript
Chrome浏览器实例的TypeScript自动化脚本
Chrome浏览器实例的TypeScript自动化脚本
|
Web App开发 人工智能 自然语言处理
WebChat:开源的网页内容增强问答 AI 助手,基于 Chrome 扩展的最佳实践开发,支持自定义 API 和本地大模型
WebChat 是一个基于 Chrome 扩展开发的 AI 助手,能够帮助用户理解和分析当前网页的内容,支持自定义 API 和本地大模型。
1059 1