【发布时间】:2010-09-18 09:18:09
【问题描述】:
在深入探讨这个问题之前,我想先说明一下情况。我们的网络分析公司是大型网站的顾问,并且(除了添加单个 SCRIPT 标签)我们无法控制页面本身。
我们现有的脚本使用“旧”方式安装处理程序(element.onclick = blah 的花哨版本;它也执行原始处理程序),完全不知道页面上的“新”(addEventListener 或 attachEvent)处理程序。我们希望解决此问题,以使我们的脚本能够在更多网站上运行,而无需进行太多自定义开发。
这里最初的想法是让我们自己的脚本使用 addEventListener/attachEvent,但这带来了一个问题:客户端的站点使用“旧”方式设置处理程序,它会清除我们安装“新”的处理程序大大地。快速而肮脏的测试表明,这在 IE7 和 FF3 中都会发生,尽管我没有测试整个浏览器范围。还有一个风险是,如果我们在页面的事件处理程序已经设置后使用“新”方式,我们可能会删除它们的处理程序。
所以我的问题是:我可以使用什么安全的技术来使用 addEventListener/attachEvent 在 Javascript 中添加一个事件处理程序,无论页面上的其他事件处理程序是如何安装的,它都能正常工作?
请记住:我们无法修改安装我们脚本的站点。 (我必须强调,因为此类问题的默认答案始终是,“只需重写页面,以相同的方式完成所有操作。”)
【问题讨论】:
标签: javascript events dom attachevent