Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在firefox插件sdk中记录用户输入并确认_Javascript_Firefox Addon Sdk - Fatal编程技术网

Javascript 在firefox插件sdk中记录用户输入并确认

Javascript 在firefox插件sdk中记录用户输入并确认,javascript,firefox-addon-sdk,Javascript,Firefox Addon Sdk,我有一个问题,我已经挣扎了几天了 我正在为firefox编写一个userInput记录系统,以期使用它记录基于web的应用程序的测试 我在表单字段上记录onchange事件,并使用contentScript将它们保存在存储中,在每个字段的onchange事件中添加监听器 field.addEventListener('change', recordFieldChange); 我还使用基于观察者服务的window.confirm方法重写来记录用户js确认响应 var obs = require(

我有一个问题,我已经挣扎了几天了

我正在为firefox编写一个userInput记录系统,以期使用它记录基于web的应用程序的测试

我在表单字段上记录onchange事件,并使用contentScript将它们保存在存储中,在每个字段的onchange事件中添加监听器

field.addEventListener('change', recordFieldChange);
我还使用基于观察者服务的window.confirm方法重写来记录用户js确认响应

var obs = require("observer-service");

obs.add("content-document-global-created", observeWindow);

function observeWindow(subject) {
  var window = subject.wrappedJSObject;
  var standardConfirm = window.confirm;

  window.confirm = function(pMessage) {
    response = standardConfirm(pMessage);
    recordConfirm(response);
    return response;
  }
};
我遇到的问题是,由字段更改触发确认的任何确认响应都是在字段更改之前记录的,这是运行测试的错误顺序

我认为这是因为页面的onchange是在addoncontentscript之前计算的,有没有办法改变这个顺序

我希望找到一个解决方案或解决办法,不使用超时或更改基本页面内容。
我还需要能够记录由其他事件(如页面加载)引起的确认。

问题在于页面和内容脚本在同一元素上注册事件处理程序,并且调用它们的顺序未定义(但是,我认为Firefox总是在通过
addEventListener
添加任何侦听器之前调用
onchange
)。您需要在网页执行并触发其他操作之前获取
change
事件。解决方案是在顶层捕获事件。在捕获阶段,事件“下沉”到实际元素,并在气泡阶段开始之前触发捕获事件侦听器,事件再次上升并触发常规事件侦听器。类似这样的操作应该可以工作:

window.addEventListener("change", recordFieldChange, true);

function recordFieldChange(event)
{
  var field = event.target;
  ...
}

这不再在单个字段注册事件侦听器,而是在
窗口
级别注册。请注意,如果网页侦听不同的事件,如
输入
按键

谢谢您的回复。我将您建议的侦听器添加到observeWindow()中函数,但录制确认响应后侦听器函数仍会激发。:(顺便说一句,在observeWindow()函数中设置window.onchange时,这实际上是在气泡和捕获阶段中的窗口侦听器函数都发生更改后激发的。)(对不起,我是个白痴,确认对话框实际上是由应用程序中复选框和收音机的onclick提示的-您的方法代表onchange触发的确认