gpt4 book ai didi

javascript - 是否可以通过编程方式在浏览器中捕获页面上的所有事件?

转载 作者:IT王子 更新时间:2023-10-29 03:02:02 25 4
gpt4 key购买 nike

首先,这是一个由 W3C 标准定义的事件类型列表。 (这个列表是基于 HTML5 标准中定义的 onevent 属性。我假设还有几十种其他事件类型,但这个列表已经足够长了。)

  • 中止
  • 后印
  • 预印本
  • 卸载前
  • 模糊
  • 会玩
  • 可以通关
  • 改变
  • 点击
  • 上下文菜单
  • 复制
  • 改变
  • 点击
  • DOMContentLoaded
  • 拖动
  • 代理人
  • 拖拽
  • 拖车
  • 快速启动
  • 放弃
  • durationchange
  • 清空
  • 结束
  • 错误
  • 专注
  • 专注
  • 专注
  • 变形
  • 表单输入
  • 散列
  • 输入
  • 无效
  • 按键
  • 按键
  • 按键
  • 加载
  • 加载数据
  • 加载元数据
  • 加载开始
  • 留言
  • 鼠标按下
  • 鼠标输入
  • 鼠标离开
  • 鼠标移动
  • 鼠标悬停
  • 鼠标悬停
  • 鼠标弹起
  • 鼠标滚轮
  • 离线
  • 在线
  • 隐藏页面
  • 网页展示
  • 粘贴
  • 暂停
  • 弹出状态
  • 进步
  • 汇率变化
  • 准备好
  • 重做
  • 重置
  • 调整大小
  • 滚动
  • 寻求
  • 寻求
  • 选择
  • 展示
  • 停滞不前
  • 存储
  • 提交
  • 暂停
  • 时间更新
  • 撤消
  • 卸载
  • 体积变化
  • 正在等待

现在,是否可以定义一个全局事件处理程序,当 any 事件最初发生在页面上的 any 元素上时调用? (在这种情况下,我不想计算元素上发生的那些事件,因为它们从后代元素中冒出来 - 这就是我写“最初发生”的原因。)

如果那不可能,是否至少可以定义一个事件处理程序,当任何事件冒泡到 DOM 树的根(它是 文档 对象或 window 对象 - 两者都应该有效)? (我知道可以通过编程方式停止冒泡,但我会在没有在任何其他元素上定义其他处理程序的页面上使用此事件处理程序。)(另外,我相信有些事件不会冒泡,但让我们忽略这些为了这个论点的案例。)

我知道我可以做到这一点(使用 jQuery):

$(document).bind('abort afterprint beforeprint beforeunload etc.', function() {
// handle event
});

但这对我来说是一个相当不受欢迎的解决方案。

顺便说一句,我不需要跨浏览器的解决方案。如果它只在一种浏览器中运行,我没问题。

此外,Firebug is able to log events ,但我希望能够以编程方式(通过 JavaScript)捕获事件,而不是让它们简单地登录到控制台。

最佳答案

/*

function getAllEventTypes(){

if(location.href !='https://developer.mozilla.org/en-US/docs/Web/Events') return;

var types = {};
$('.standard-table:eq(0) tr').find('td:eq(1)').map(function(){
var type = $.trim(this.innerText) || 'OtherEvent';
types[type] = types[type] || [];
var event = $.trim(this.previousElementSibling.innerText);
if(event) types[type].push(event);
});
for(var t in types) types[t] = types[t].join(' ');
return "var DOMEvents = "+JSON.stringify(types, null, 4).replace(/"(\w+)\":/ig, '$1:');
}

*/

var DOMEvents = {
UIEvent: "abort DOMActivate error load resize scroll select unload",
ProgressEvent: "abort error load loadend loadstart progress progress timeout",
Event: "abort afterprint beforeprint cached canplay canplaythrough change chargingchange chargingtimechange checking close dischargingtimechange DOMContentLoaded downloading durationchange emptied ended ended error error error error fullscreenchange fullscreenerror input invalid languagechange levelchange loadeddata loadedmetadata noupdate obsolete offline online open open orientationchange pause pointerlockchange pointerlockerror play playing ratechange readystatechange reset seeked seeking stalled submit success suspend timeupdate updateready visibilitychange volumechange waiting",
AnimationEvent: "animationend animationiteration animationstart",
AudioProcessingEvent: "audioprocess",
BeforeUnloadEvent: "beforeunload",
TimeEvent: "beginEvent endEvent repeatEvent",
OtherEvent: "blocked complete upgradeneeded versionchange",
FocusEvent: "blur DOMFocusIn Unimplemented DOMFocusOut Unimplemented focus focusin focusout",
MouseEvent: "click contextmenu dblclick mousedown mouseenter mouseleave mousemove mouseout mouseover mouseup show",
SensorEvent: "compassneedscalibration Unimplemented userproximity",
OfflineAudioCompletionEvent: "complete",
CompositionEvent: "compositionend compositionstart compositionupdate",
ClipboardEvent: "copy cut paste",
DeviceLightEvent: "devicelight",
DeviceMotionEvent: "devicemotion",
DeviceOrientationEvent: "deviceorientation",
DeviceProximityEvent: "deviceproximity",
MutationNameEvent: "DOMAttributeNameChanged DOMElementNameChanged",
MutationEvent: "DOMAttrModified DOMCharacterDataModified DOMNodeInserted DOMNodeInsertedIntoDocument DOMNodeRemoved DOMNodeRemovedFromDocument DOMSubtreeModified",
DragEvent: "drag dragend dragenter dragleave dragover dragstart drop",
GamepadEvent: "gamepadconnected gamepaddisconnected",
HashChangeEvent: "hashchange",
KeyboardEvent: "keydown keypress keyup",
MessageEvent: "message message message message",
PageTransitionEvent: "pagehide pageshow",
PopStateEvent: "popstate",
StorageEvent: "storage",
SVGEvent: "SVGAbort SVGError SVGLoad SVGResize SVGScroll SVGUnload",
SVGZoomEvent: "SVGZoom",
TouchEvent: "touchcancel touchend touchenter touchleave touchmove touchstart",
TransitionEvent: "transitionend",
WheelEvent: "wheel"
}

var RecentlyLoggedDOMEventTypes = {};

for(DOMEvent in DOMEvents){

var DOMEventTypes = DOMEvents[DOMEvent].split(' ');

DOMEventTypes.filter(function(DOMEventType){
var DOMEventCategory = DOMEvent + ' '+DOMEventType;
document.addEventListener(DOMEventType, function(e){
if(RecentlyLoggedDOMEventTypes[DOMEventCategory]) return;
RecentlyLoggedDOMEventTypes[DOMEventCategory] = true;
setTimeout(function(){ RecentlyLoggedDOMEventTypes[DOMEventCategory] = false }, 5000);
var isActive = e.target==document.activeElement;
if(isActive) {
console.info(DOMEventCategory,
' target=', e.target,
' active=', document.activeElement,
' isActive=', true );
} else {
console.log(DOMEventCategory,
' target=', e.target,
' active=', document.activeElement,
' isActive=', false );
}

}, true);
});

}

关于javascript - 是否可以通过编程方式在浏览器中捕获页面上的所有事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5107232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com