Firefox 55.0.3(64位) - 除非在调试器

时间:2017-09-18 21:36:27

标签: javascript debugging firefox

在Firefox 55.0.3(64位)中,以下javascript(构成对象函数的一部分):

 console.log(vField.getAttribute('oninput'));
 var vEvent = new Event("input");
 var vCancelled = ! vField.dispatchEvent(vEvent);
 if (!vCancelled) {
   console.log(vEvent);
 }

按预期将以下内容输出到Firefox控制台:

  

H.eventFn(这一点,如图3所示, 'smbtn');

     

输入{target:< input#mnPWS.string.newP.x01>,isTrusted:false,eventPhase:0,bubbles:false,cancelable:false,defaultPrevented:false,composition:false,timeStamp:7655.60940690126,cancelBubble: false,originalTarget:< input#mnPWS.string.newP.x01&gt ;,explicitOriginalTarget:< input#mnPWS.string.newP.x01> }

问题: dispatchEvent()不执行H.eventFn()函数。 ...除非我在语句之前或之前插入调试器断点:

var vCancelled = ! vField.dispatchEvent(vEvent);

我看到的行为是:

  
      
  1. 使用上面的调试器断点 - 执行H.eventFn()就好了。
  2.   
  3. 在上面一行之后的任何地方使用调试器断点 - 不执行H.eventFn()。
  4.   
  5. 根本没有断点 - 不执行H.eventFn()。
  6.   

(作为旁注 - Chrome使用相同的代码执行H.eventFn(),并且浏览器都没有显示我能看到的任何javascript错误)

我对这种行为感到非常困惑,并且对任何人可能提出的任何意见表示感谢。谢谢!

1 个答案:

答案 0 :(得分:0)

在处理过程中发生:

// vField.disabled = true; 

我已经确定注释掉禁用该字段的行,如下所示:

GENERATE_SERIES

导致代码工作,不需要断点。

我只能假设:

  
      
  • 禁用该字段会导致Firefox忽略dispatchEvent(),即使它在dispatchEvent()时再次启用   声明执行。
  •   
  • ,除非在重新启用之后和dispatchEvent()语句之前存在断点,以某种方式"唤醒它"试。
  •   

备注

  • 使用Firefox Shift-F4 JS暂存器禁用,然后重新启用dispatchEvent()(这会排除XHR请求/响应)。我很遗憾无法确定这是否是因为暂存器提供相同的"唤醒"作为调试器,或者问题是否由XHR引起。

如果有人有任何明智的想法提供比我的bab呀学语更多的见解,请大声喊叫。

注意:请参阅下面的Kaiido评论,以获得有关此问题的非常有效的解决方法。