Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.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
flash阻止javascript事件_Javascript_Flash_Actionscript 3_Internet Explorer_Swfobject - Fatal编程技术网

flash阻止javascript事件

flash阻止javascript事件,javascript,flash,actionscript-3,internet-explorer,swfobject,Javascript,Flash,Actionscript 3,Internet Explorer,Swfobject,这是对原来帖子的编辑,现在我对这个问题有了更好的理解现在使用源代码 在IE中,如果body(或另一个html div有焦点),那么您可以同时按下并单击flash,然后释放。。。永远不会触发keyup事件。它不是在javascript或flash中启动的。这一关键事件在哪里 这是您得到的事件触发顺序: javascriptKeyEvent:bodyDn**currentFocusedElement:body javascriptKeyEvent:docDn**currentFocusedEleme

这是对原来帖子的编辑,现在我对这个问题有了更好的理解现在使用源代码

在IE中,如果body(或另一个html div有焦点),那么您可以同时按下并单击flash,然后释放。。。永远不会触发keyup事件。它不是在javascript或flash中启动的。这一关键事件在哪里

这是您得到的事件触发顺序:

  • javascriptKeyEvent:bodyDn**currentFocusedElement:body
  • javascriptKeyEvent:docDn**currentFocusedElement:body
  • actionScriptEvent:激活**currentFocusedElement:[对象]
  • actionScriptEvent:mouseDown**currentFocusedElement:[对象]
  • actionScriptEvent:mouseUp**currentFocusedElement:[对象]
  • 随后的keydown和keyup事件由flash捕获,但初始keyup从未触发。。在任何地方我需要那个钥匙

    什么不起作用:

    • 检查键是否在没有侦听器的情况下启动
    • wmode不透明或直接。虽然,在不透明的情况下,复制要困难得多
    • 尽快将焦点推回到javascript以赶上事件。(使用javascript中的模糊侦听器尝试此操作,并在激活as3时设置焦点。)
    • jquery或prototype都无法捕获缺少的keyup
    • 静态和动态swfobject发布
    以下是html/javascript:

    <html>
    
    <head>
        <script type="text/javascript" src="prototype.js"></script>
        <script type="text/javascript" src="swfobject.js"></script> 
    
        <script>
    
    
        function ic( evt )
        {   Event.observe( $("f1"), 'keyup', onKeyHandler.bindAsEventListener( this, "f1Up" ) );
            Event.observe( $("f2"), 'keyup', onKeyHandler.bindAsEventListener( this, "f2Up" ) );
            Event.observe( document, 'keyup', onKeyHandler.bindAsEventListener( this, "docUp" ) );
            Event.observe( $("body"), 'keyup', onKeyHandler.bindAsEventListener( this, "bodyUp" ) );
            Event.observe( window, 'keyup', onKeyHandler.bindAsEventListener( this, "windowUp" ) );
    
            Event.observe( $("f1"), 'keydown', onKeyHandler.bindAsEventListener( this, "f1Dn" ) );
            Event.observe( $("f2"), 'keydown', onKeyHandler.bindAsEventListener( this, "f2Dn" ) );
            Event.observe( document, 'keydown', onKeyHandler.bindAsEventListener( this, "docDn" ) );
            Event.observe( $("body"), 'keydown', onKeyHandler.bindAsEventListener( this, "bodyDn" ) );
            Event.observe( window, 'keydown', onKeyHandler.bindAsEventListener( this, "windowDn" ) );
    
            Event.observe( "clr", "mousedown", clearHandler.bindAsEventListener( this ) );
    
            swfobject.embedSWF( "tmp.swf",
                                "f2",
                                "100%",
                                "20px",
                                "9.0.0.0", null, {}, {}, {} );
        }
    
        function clearHandler( evt )
        {   clear( );
        }
    
        function clear( )
        {   $("log").innerHTML = "";    
        }
    
        function onKeyHandler( evt, dn )
        {   logIt( "javascriptKeyEvent:"+dn );
        }
    
        function AS2JS( wha )
        {   logIt( "actionScriptEvent::" + wha );
        }
    
        function logIt( k )
        {   
            var id = document.activeElement;
            if (id.identify)
            {   id = id.identify();
            }
    
            $("log").innerHTML = k + " ** focuedElement: " + id + "<br>" + $("log").innerHTML;
        }
    
        Event.observe( window, 'load', ic.bindAsEventListener(this) );
    
        </script>
    
    </head>
    
    <body id="body">
    <div id="f1"><div id="f2" style="width:100%;height:20px; position:absolute; bottom:0px;"></div></div>
    
    <div id="clr" style="color:blue;">clear</div>
    
    <div id="log" style="overflow:auto;height:200px;width:500px;"></div>
    </body>
    </html>
    

    将SWF嵌入放在任何其他JavaScript之前

    swfobject.embedSWF( "tmp.swf",
                                "f2",
                                "100%",
                                "20px",
                                "9.0.0.0", null, {}, {}, {} );
    
    我会在所有函数之外或者在一个准备文档的jQuery函数中尝试它,因为Flash得到一个无穷大的z索引,并且应该在任何其他函数之前接受键击,除非在第一个键启动时它还不存在


    我的猜测是,第一把钥匙是在任何东西都能收到它之前出现的。在on document ready函数中使用jQuery尝试您的keyup事件触发器。

    下面是我所期望的情况:当焦点在html中时,您可以按键。单击flash对象,焦点转到该对象。当键被提起时,因为html不再具有焦点,所以它不知道键向上。你可以很容易地通过做同样的事情来测试这一点,而不是点击flash对象,点击另一个窗口并尝试同样的事情,因为这实际上就是正在发生的事情

    至于flash中没有发生的key-up事件,这可能是因为它在没有得到key-down的情况下不会生成key-up事件,而它从来没有得到过key-up事件,因为焦点仍然在html中


    我可以想出两种可能的解决办法。首先是要确保。第二种方法是在flash对象上覆盖一个空div,这样它就不会收到焦点。

    谢谢。我已经看过你的回复好几次了,我想你认为问题只是在加载的时候。如果我错了,请纠正我。加载后,问题会反复出现——您可以将焦点放在另一个html div上,然后单击/type on flash来播放“Lost the keyup”。在JavaScript中不触发keyup事件听起来像是我期望的行为。ActiveX控件使用事件,不会将它们传播回包含它们的文档。但这并不能解释为什么Flash不能正确触发事件——这是一个有趣的问题。不幸的是,我认为唯一能够回答这个问题的人是Adobe的员工:-)关于你的第二个建议——swf上的一个空div——这是可行的,但被迫使用兼容的嵌入模式会降低性能。很遗憾。关于你的第一个建议,如果你的嵌入式flash只是页面上许多元素中的一个,那么Adobe的建议效用有限。出于好奇,使用模糊事件作为按键的故障保护怎么样?也就是说,如果文档接收到一个keydown,然后是一个blur事件,手动触发keydup事件。@Codemonkey-是的,这是一个非常好的主意。绝对值得一试。
    swfobject.embedSWF( "tmp.swf",
                                "f2",
                                "100%",
                                "20px",
                                "9.0.0.0", null, {}, {}, {} );