Javascript 如何从内容脚本访问活动选项卡的事件处理程序?

Javascript 如何从内容脚本访问活动选项卡的事件处理程序?,javascript,jquery,google-chrome,google-chrome-extension,Javascript,Jquery,Google Chrome,Google Chrome Extension,我正在编写一个chrome扩展,它访问活动选项卡页面,并通过向内容脚本注入一些代码来操纵DOM。然而,在触发应该由活动选项卡页面自己的JavaScript注册的事件处理程序时,我没有运气 例如,在网页本身上有一个保存按钮,单击该按钮时保存所有表单数据。在我的chrome扩展上,我有一个按钮,当点击时,它会向内容脚本发送消息。然后,内容脚本有一行代码启动网页保存按钮的事件处理程序来保存表单数据,但它不起作用,即使我使用$'btnSave'命令它这样做。单击 另一个例子是,我的chrome扩展上有一

我正在编写一个chrome扩展,它访问活动选项卡页面,并通过向内容脚本注入一些代码来操纵DOM。然而,在触发应该由活动选项卡页面自己的JavaScript注册的事件处理程序时,我没有运气

例如,在网页本身上有一个保存按钮,单击该按钮时保存所有表单数据。在我的chrome扩展上,我有一个按钮,当点击时,它会向内容脚本发送消息。然后,内容脚本有一行代码启动网页保存按钮的事件处理程序来保存表单数据,但它不起作用,即使我使用$'btnSave'命令它这样做。单击

另一个例子是,我的chrome扩展上有一个按钮,单击该按钮时,会从网页上的下拉列表中选择一个值。它选择fine值,但它不会为下拉列表触发change事件,即使我使用$'ddl.change显式地告诉它这样做

当我在控制台中键入它们时,这两个命令都会触发相应的控件事件,但在内容脚本中使用它们时则不会。那么,如何从内容脚本访问网页的事件处理程序呢


p.S.还尝试使用.triggerevent、.triggerHandlerevent、.change for select调用事件处理程序,我的代码包装在$document.ready中。

以编程方式设置值不会触发更改事件。就像调用click不一定调用所有的处理程序一样。你必须手动启动它。我建议您使用这个函数,因为它不是特定于jQuery的

请注意,如果您使用上述函数,您可以触发一个click事件,它的行为就像用户单击了某个东西一样。但是,对于更改事件,您必须以编程方式进行更改,然后触发更改事件

// Trigger a user click and the event
fireEvent($('#btnSave')[0], 'click');

// Make a change and fire a change event
var ddl =  $('#ddl');
ddl.val('something');
fireEvent(ddl[0], 'change')

您能否解释为什么转到控制台并键入.change会触发更改事件,但在我的代码中运行时不会触发更改事件?我的最佳猜测是,调用$.change只会触发已注册的事件jQuery@wisloc这是因为默认情况下,您是在页面的上下文中执行的。