这是一个问题:
我有一个iframe,可以显示任何网页(不一定是我开发的)。在这个页面上可能会附上一些事件(大概我不知道)。
如何动态拦截这些事件并将其存储以供以后复制?
例如:假设当鼠标移动到某个div上时,它会改变颜色。我想确保当您触发将更改div颜色的事件时;注册的";所有一系列信息将允许我(无需用户交互)在以后复制它。
录制和后续复制的想法?
简单的答案是:你不能。
如果"任何网页"的文档对象位于不同的域上,则您无法在页面上使用JavaScript访问该文档对象,我认为如果您说"任意网页",则是因为同源政策。你需要IFRAME中的网站与你的脚本合作才能实现这一点,这在"任何网页"中都不会发生。
IFRAME在同一域上
如果您的网页在同一个域上,那么您可以通过为您想要捕获的每个事件添加一个侦听器来访问IFRAMEs body元素的事件,如这里所述。这对于所有冒泡到身体的事件都是可能的。因此,如果您的事件被阻止向上冒泡到主体,则它们将不会被此解决方案捕获。
jQuery('#website body').on('click mouseover mouseout', function(event) {
console.log(event.type);
});
假设您有一个id为website
的IFRAME,您可以通过如上所述用空格分隔列出事件来捕获您想要的事件。该示例捕获click
、mousover
和mouseout
。
也许这更接近你想要的?
将事件处理程序添加到div中。例如,您可以使用
$('#div').mouseover(function(e) { ... })
或
('#div').on('mouseover', function(e) { ... })
对于"复制",您必须将有关过去事件的信息存储在某个对象中。您甚至可以存储事件对象本身。