我正在编写一个chrome扩展,它访问活动标签页并通过向内容脚本注入一些代码来操作DOM。但是,在触发应该由活动标签页自己的JavaScript注册的事件处理程序时,我没有运气。
例如,在网页本身上有一个保存按钮,可在单击时保存所有表单数据。在我的chrome扩展程序中,我有一个按钮,当单击该按钮时,会向内容脚本发送消息。然后内容脚本有一行代码来激活网页保存按钮的事件处理程序以保存表单数据,但它不起作用,即使我使用$('#btnSave').click()
告诉它也是如此。 / p>
另一个例子,我的Chrome扩展程序上有一个按钮,单击该按钮时,会从网页上的下拉列表中选择一个值。它选择值很好,但它不会触发下拉列表的更改事件,即使我明确告诉它使用$('#ddl').change()
这样做。
当我在控制台中键入时,两个命令都会激活相应的控件事件,但在我的内容脚本中使用它们时则不会。那么如何从我的内容脚本访问网页的事件处理程序?
P.S。还尝试使用.trigger(event)
,.triggerHandler(event)
,.change()
调用事件处理程序进行选择,我的代码包含在$(document).ready()
中。
答案 0 :(得分:1)
以编程方式设置值不会触发change
事件。就像调用click()
并不一定会调用所有处理程序一样。你必须手动开火。我建议你使用函数at this answer,因为它不是特定于jQuery的。
请注意,如果您使用上述功能,则可以触发单击事件,其行为就像用户单击某些内容一样。但是,对于更改事件,您必须以编程方式进行更改,然后触发更改事件
// 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')