热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[Web拾遗]有关DOM元素与事件的3个谜题

[Web拾遗]有关DOM元素与事件的3个谜题

 

一、背景知识介绍

通常为DOM元素增加事件有以下几种办法:
1,硬编码形式
2,事件监听
3,JS框架提供的事件绑定

1,硬编码形式,采用的是原始事件(Original Event)的形式。
   代码类似如下:

1    <element onclick='func();' />
2    document.getElementById('element_id').eventName = func();

2,事件监听机制,这种形式采用的做法是根据DOM事件机制,分为DOM标准事件模型addEventListener和IE事件模型attchEvent。

   代码类似如下:

 1    var addEventHandler = function(ele, evt, fn){
 2                 
 3     if (ele.addEventListener) {
 4                     
 5       ele.addEventListener(evt, fn, false);
 6     }
 7     else 
 8       if (ele.attachEvent) {
 9                         
10          ele.attachEvent('on' + evt, fn);
11       }
12       else {
13                         
14          ele['on' + evt] = fn;
15       }
16     };
17 
18   var ele = document.getElementById('element_id');
19   addEventHandler(ele, 'eventName'function(){ code... });
20 
21 

 

3,JS框架提供的事件绑定机制,这里假设使用jQuery框架。
   代码类似如下:

1    $('element_id').bind('eventName'function(event){ code... });
2    $('element_id').click(function(){ code... });
3 

 

 

二、谜题

谜题是这样的,加入页面中有如下的代码片段:

 

 1 <html>
 2 ... ...
 3 <script type="text/Javascript" src="js/jquery-lastest.js">script>
 4 <script type="text/Javascript">
 5 
 6   var addEventhandler = function(ele, evt, fn){
 7 
 8     if (ele.addEventListener) {
 9 
10       ele.addEventListener(evt, fn, false);    
11     }
12     else
13       if (ele.attchEvent) {
14 
15         ele.attchEvent('on' + evt, fn);
16       }
17       else {
18  
19         ele['on' + evt] = fn;
20       }
21   };
22 
23   function func_test(){
24  
25     not_existfunc();
26   }
27 
28   $(document).ready(function(){
29 
30     // code 02
31     var jsbutton03 = document.getElementById('jsbutton_original_id03');
32     jsbutton03.onclick = func_test;
33 
34     // code 03
35     var jsbutton02 = document.getElementById('jsbutton_original_id02');
36     addEventhandler(jsbutton02, 'click', func_test);
37 
38     // code 04
39     $('#jqbutton_standard_id01').click(func_test);
40   });
41 
42   window.onerror = function(){
43 
44     return true;
45   };
46 script>
47 ... ...
48 <body>
49   <input id="jsbutton_original_id01" type="button" onclick="func_test();" /> 
50   <input id="jsbutton_original_id02" type="button" />
51   <input id="jsbutton_original_id03" type="button" />
52   <input id="jqbutton_standard_id01" type="button" />
53 body>
54 ... ...
55 <script type="text/Javascript">
56 
57   // code 05
58   $(document).ready(function(){
59 
60     /*
61      * 在这里编写代码,目标是在不改变上面代码的情况下对Code 1 ~ 4 的里的事件进行“手术”。
62      * 手术的要求是:
63      * Code 1 ~ 4 里的触发的OnClick行为会触发func_test方法,该方法会触发一个不存在的方法not_exist();
64      * 要求对其增加try/catch,再catch里捕获此错误。
65      * 这里我提供 Code 1, 2 的改写方法,浏览器的兼容程度只需要考虑主流的IE6,7,8和FireFox3+即可,Chrome,Safari,Opera可以不考虑。
66      * 代码可以使用jq代码,也可以使用js代码实现。
67      */
68 
69     // hijack code 01
70     var original_sorce_01 = $('#jsbutton_original_id01').attr('onclick'); // typeof original_source_01 is function
71     $('#jsbutton_original_id01').removeattr('onclick').click(function(event){
72 
73     try{
74 
75       original_sorce_01();
76     } catch (ex) {
77 
78       // code... ...
79     }
80   });
81 
82     // hijack code 02
83     var jsbutton02 = document.getElementById('jsbutton_original_id02');
84     var original_source_02 = jsbutton02.onclick;
85     jsbutton02.onclick = function(){
86  
87       try{
88 
89         original_source_02();
90       } catch (ex) {
91 
92         // code... ...
93       }
94     };
95   });
96 script>
97 html>
98 
99 

 

遵循以上的思路,有没有人可以帮助我写一下hijack code 03 和 hijack code 04的代码?或者提供其他解决途径呢?
1,既有代码是绝对不能修改的。
2,如果可以,扩展js原始类也是允许的。
3,func_test和not_existfunc是事先不知道的,只能通过“获取”得到。
4,最终的目的我需要知道错误发生的错误对象,方法名和事件、参数,基于此目的,其他解决方案也是可以的。
5,不能使用firebug之类的客户端调试工具。来让这类工具告诉你“代码错了”。


推荐阅读
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 在 Vue 应用开发中,页面状态管理和跨页面数据传递是常见需求。本文将详细介绍 Vue Router 提供的两种有效方式,帮助开发者高效地实现页面间的数据交互与状态同步,同时分享一些最佳实践和注意事项。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 本文详细探讨了 jQuery 中 `ajaxSubmit` 方法的使用技巧及其应用场景。首先,介绍了如何正确引入必要的脚本文件,如 `jquery.form.js` 和 `jquery-1.8.0.min.js`。接着,通过具体示例展示了如何利用 `ajaxSubmit` 方法实现表单的异步提交,包括数据的发送、接收和处理。此外,还讨论了该方法在不同场景下的应用,如文件上传、表单验证和动态更新页面内容等,提供了丰富的代码示例和最佳实践建议。 ... [详细]
  • 近期,微信公众平台上的HTML5游戏引起了广泛讨论,预示着HTML5游戏将迎来新的发展机遇。磊友科技的赵霏,作为一名HTML5技术的倡导者,分享了他在微信平台上开发HTML5游戏的经验和见解。 ... [详细]
  • 深入解析HTML5字符集属性:charset与defaultCharset
    本文将详细介绍HTML5中新增的字符集属性charset和defaultCharset,帮助开发者更好地理解和应用这些属性,以确保网页在不同环境下的正确显示。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • Webdriver中元素定位的多种技术与策略
    在Webdriver中,元素定位是自动化测试的关键环节。本文详细介绍了8种常用的元素定位技术与策略,包括ID、名称、标签名、类名、链接文本、部分链接文本、XPath和CSS选择器。每种方法都有其独特的优势和适用场景,通过合理选择和组合使用,可以显著提高测试脚本的稳定性和效率。此外,文章还探讨了在复杂页面结构中如何灵活运用这些定位技术,以应对各种挑战。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
author-avatar
漂漂雪飘飘业_348
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有