簡體   English   中英

如何找到添加自定義事件偵聽器的位置?

[英]How to find where a custom event listener has been added?

在頁面上的“友好”iframe 中運行了一段 3rd 方代碼。 代碼可能會或可能不會為它自己的自定義事件之一添加到外部頁面上的任何元素或頁面上某處的 iframe 之一(在它們的窗口、文檔或 dom 元素上)的偵聽器。

我知道自定義事件的名稱,但我如何知道監聽器被添加到哪里了?

這是一種選擇 - 覆蓋標准實現:

 var addEventListenerImplementation = Node.prototype.addEventListener; Node.prototype.addEventListener = function (event, callback) { alert("Hey, someone attached an event handler to me"); addEventListenerImplementation.call(this, event, callback); }; document.getElementById("div").addEventListener("click", function () { alert("clicked"); });
 div { background: red; width: 300px; height: 300px; }
 <div id="div"/>

這在大多數情況下應該有效,但不幸的是addEventListener不是附加事件的唯一方法,因此您可能還需要覆蓋Event.prototype.observe 最后,如果事件處理程序是使用element.onclick或任何其他onevent函數附加的,則您無法真正覆蓋它們。 一種可能但超級凌亂的解決方案如下:

  1. Node.prototype上定義一個新屬性。 Object.defineProperty(Node.prototype, "ONMYCLICK", function () { get: function () { return null; }, set: function (handler) { console.log("Hey, a handler was attached!"); this.onclick = handler; } });
  2. 在您最喜歡的文本編輯器中打開庫的腳本並將所有出現的.onclick替換為.ONMYCLICK
  3. ???
  4. 利潤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM