zoukankan      html  css  js  c++  java
  • 浏览器兼容问题,Chrome中Flash的onclick事件

    群里的朋友问了个问题:

    chrome下面如何给flash加onclick事件?
    搜索了下,找到了一些方法,但那些方法是说其他浏览器的,用一个button包住flash
    在Chrome中 embed不支持onclick,但支持onmouseover,onmousedown,onmouseup

    就利用这几个方法,自己拼凑一个click事件:

    设置一个变量click
    over的时候 +1
    down的时候 +2
    up 的时候 +4
    out的时候 清零
    发生up的时候,检查click变量,如果是7,那就是click事件了

    <div style="border:1px #f00 solid; 486px">
    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="flash_obj" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="468" height="60">
    <param name="movie" value="http://static.googleadsserving.cn/pagead/imgad?id=CICAgICQjvvjThDUAxg8MgiCYoyW5NzeKQ">
    <param name="quality" value="high">
    <param name="AllowScriptAccess" value="never">
    <param name="wmode" value="opaque">
    <param name="FlashVars" value="">
    <embed src="http://static.googleadsserving.cn/pagead/imgad?id=CICAgICQjvvjThDUAxg8MgiCYoyW5NzeKQ" id="flash_embed" width="468" height="60" wmode="opaque" flashvars="" type="application/x-shockwave-flash" allowscriptaccess="never" pluginspage="http://www.macromedia.com/go/getflashplayer" >
    </object>
    </div>

    <script>
    if(!console){
    console
    = { log: function(){} };
    }
    var timeoutID,
    c
    = 0,
    flashObj
    = document.getElementById('flash_obj'),
    flashEmbed
    = document.getElementById('flash_embed');
    function over(){
    c
    |= 1;
    console.log(
    'mouse over', c);
    }
    function out(){
    c
    = 0;
    console.log(
    'mouse out', c);
    }
    function down(){
    c
    |= 2;
    console.log(
    'mouse down', c);
    }
    function up(){
    c
    |= 4;
    console.log(
    'mouse up', c);
    if(c === 7){
    click();
    c
    |= 8;
    if(! timeoutID){
    console.log(
    'avoid twice click', c);
    timeoutID
    = setTimeout(function(){
    c
    ^= 8; //异或,a ^ b, ab不同则返回1
    console.log('resume click', c);
    timeoutID
    = undefined;
    },
    100);
    }
    }
    }
    function click(){
    console.log(
    'trigger click', c);
    alert(
    'click');
    }
    if(flashObj){
    flashObj.onmouseover
    = over;
    flashObj.onmouseout
    = out;
    flashObj.onmousedown
    = down;
    flashObj.onmouseup
    = up;
    }
    if(flashEmbed){
    flashEmbed.onmouseover
    = over;
    flashEmbed.onmouseout
    = out;
    flashEmbed.onmousedown
    = down;
    flashEmbed.onmouseup
    = up;
    }
    </script>


    呃,上面的四个事件都会同时发生两次,所以用了更高位(8)来避免重复事件,并在100毫秒后恢复

    作者:阿良
    出处:http://www.cnblogs.com/arliang 本文采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议
    进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

  • 相关阅读:
    利用jmeter+JAVA对RPC的单接口(dubbo接口等)进行性能测试
    spring mvc中,直接注入的HttpServletRequst是否安全呢?
    基础篇系列,JAVA的并发包
    撸基础篇系列,JAVA的NIO部分
    1, 本地缓存的实现以及遇到的问题
    python操作mysql数据库之pymysql
    软件测试中常见的一些经典Bug
    做性能测试前需要弄明白的几个知识点
    接口测试常见问题汇总
    用例中四大核心要素的写作规范
  • 原文地址:https://www.cnblogs.com/arliang/p/Flash_Click_Event_In_Chrome.html
Copyright © 2011-2022 走看看