Javascript `事件中自定义属性的未定义值(Firefox)

Javascript `事件中自定义属性的未定义值(Firefox),javascript,firefox,iframe,javascript-events,undefined,Javascript,Firefox,Iframe,Javascript Events,Undefined,我有一个test.html页面,代码为(): var paymentEventHandler=函数(e){ 控制台日志(e) console.log('payment:'+JSON.stringify(e.status)) 警报(“状态:”+e.status) } if(文件增补列表器){ document.addEventListener(“付款”,paymentEventHandler) }否则{ 文档.附件('onPayment',paymentEventHandler) } 和ifr

我有一个test.html页面,代码为():


var paymentEventHandler=函数(e){
控制台日志(e)
console.log('payment:'+JSON.stringify(e.status))
警报(“状态:”+e.status)
}
if(文件增补列表器){
document.addEventListener(“付款”,paymentEventHandler)
}否则{
文档.附件('onPayment',paymentEventHandler)
}
和iframe.html:


var事件
if(document.createEvent){
事件=document.createEvent(“HTMLEvents”)
event.initEvent(“付款”,true,true)
}否则{
event=document.createEventObject()
event.eventType='payment'
}
event.status='确定'
if(window.parent.document.dispatchEvent){
window.parent.document.dispatchEvent(事件)
}否则{
window.parent.document.firevent('onPayment',事件)
}
代码可以在Chrome、Safari、Opera中使用,但在Firefox中我得到了未定义的。为什么?


谢谢。

您需要创建自定义事件,而不是使用initCustomEvent创建htmlevent和初始化

html

var paymentEventHandler=函数(e){
警报(“状态:”+e.detail.status)
}
if(文件增补列表器){
document.addEventListener(“付款”,paymentEventHandler)
}否则{
文档.附件('onPayment',paymentEventHandler)
}
iframe

var事件
if(document.createEvent){
事件=document.createEvent(“CustomEvent”)
initCustomEvent(“付款”,true,true,{status:“ok”});
}否则{
event=document.createEventObject()
event.eventType='payment'
}
if(window.parent.document.dispatchEvent){
console.dir(事件);
window.parent.document.dispatchEvent(事件)
}否则{
console.dir(事件);
window.parent.document.firevent('onPayment',事件)
}

旧的浏览器版本如何?@TimothyKlim:我已经解决了它,可以在FF上工作了。我没有访问IE的权限。这里有一个链接供您了解[IE]()。我的建议是切换到JQuery,把浏览器兼容性问题留给它来解决。我知道JQuery事件(和其他),但我正在寻找一种不用库就能做到这一点的方法。好的,我将使用CustomEvent。谢谢。我的新方法是:window.paymentEventHandler=函数(状态){console.log(“paymentEventHandler:+JSON.stringify(状态))}和if(window.parent.paymentEventHandler){window.parent.paymentEventHandler({status:'ok'}})else{…events way…}
    <!doctype html>
    <html>
    <head>
      <script>
      var paymentEventHandler = function (e) {
        alert('status: ' + e.detail.status)
      }
    
      if (document.addEventListener) {
        document.addEventListener('payment', paymentEventHandler)
      } else {
        document.attachEvent('onPayment', paymentEventHandler)
      }
      </script>
    </head>
    <body>
      <iframe src='iframe.html'></iframe>
    </body>
    </html>
    <!doctype html>
    <html>
        <head>
            <script>
             var event
    
             if (document.createEvent) {
                 event = document.createEvent("CustomEvent")
                 event.initCustomEvent("payment", true, true, {status:"ok"});
             } else {
                 event = document.createEventObject()
                 event.eventType = 'payment'
             }
    
             if (window.parent.document.dispatchEvent) {
                  console.dir(event);
                 window.parent.document.dispatchEvent(event)
             } else {
                  console.dir(event);
                  window.parent.document.fireEvent('onPayment', event)
             }
            </script>
        </head>
        <body>
        </body>
    </html>