Javascript 如何检测Chrome';s";点击播放“;闪存阻止功能当前处于活动状态 跟踪Chrome的点击播放功能的状态

Javascript 如何检测Chrome';s";点击播放“;闪存阻止功能当前处于活动状态 跟踪Chrome的点击播放功能的状态,javascript,google-chrome,flash,Javascript,Google Chrome,Flash,您如何检测Flash插件已被暂时禁用,或者相反,检测到它已因Chrome的“点击播放”功能而启用 背景 Chrome的新“点击播放”功能检测不明显的插件并暂停它们。Chrome在插件上显示一个“播放”按钮,用户可以点击“播放”按钮激活插件。(参考资料:) 下面是它的屏幕截图(注意白色播放按钮): 您可以在这个屏幕截图中看到它暂停了一个视频播放器(右栏)。该视频播放器具有基于HTML5的控件,覆盖了基于Flash的视频播放器。因此,用户无法单击播放按钮,因为整个SWF都被基于HTML5的播放/暂停

您如何检测Flash插件已被暂时禁用,或者相反,检测到它已因Chrome的“点击播放”功能而启用

背景 Chrome的新“点击播放”功能检测不明显的插件并暂停它们。Chrome在插件上显示一个“播放”按钮,用户可以点击“播放”按钮激活插件。(参考资料:)

下面是它的屏幕截图(注意白色播放按钮):

您可以在这个屏幕截图中看到它暂停了一个视频播放器(右栏)。该视频播放器具有基于HTML5的控件,覆盖了基于Flash的视频播放器。因此,用户无法单击播放按钮,因为整个SWF都被基于HTML5的播放/暂停控件有意覆盖

我需要的是通过“点击播放”功能检测SWF何时暂停,这样我就可以禁用控件并使SWF交互

我试过的
  • 在JavaScript中-通过
    ExternalInterface
    公开的所有方法仍然可用,尽管SWF已暂停。它实际上像在播放一样响应,并且不返回错误
  • 在JavaScript中-将嵌入式
    的大小更新为>700x400px。“单击播放”不会暂停此大小的SWF。因此,我尝试使用
    -webkit transfor:scale(0.5)
    使用CSS将其缩放回所需大小。Chrome将计算最终渲染的大小并暂停SWF,而不考虑这一点
  • 在Flash中-
    stage.frameRate
    返回正确的值(例如,暂停SWF时未将其设置为0)


  • 在写下这个问题的过程中,我找到了答案,决定无论如何都发到这里,以防其他人在这个问题上需要帮助

    要绕过Chrome点击播放限制,请从与站点相同的域和协议加载SWF


    您可以使用AS3
    ThrottleEvent
    来检测SWF何时被节流

    // AS3 code
    import flash.events.ThrottleEvent;
    import flash.external.ExternalInterface;
    
    stage.addEventListener(ThrottleEvent.THROTTLE, onThrottleEvent);
    
    private function onThrottleEvent(e:ThrottleEvent) {
        ExternalInterface.call("onThrottleEvent", e.state); // call javascript function 
    }
    
    您可以设置一个
    ExternalInterface
    调用,以在JavaScript中跟踪此状态,在JavaScript manage
    z-index
    中根据SWF是否被限制来管理SWF

    // JS Code
    var IS_THROTTLED = false;
    
    window.onThrottleEvent = function (throttleState) {
      IS_THROTTLED = (throttleState === "throttle");
    }
    

    在页面底部添加一个大于398x298的空闪存文件。我发现,一旦你有至少一个闪存文件超过其最低铬将不会暂停你的任何闪存。你不能用CSS隐藏这个额外的Flash文件。可以选择使用javascript超时(3秒)隐藏空Flash文件,以防它干扰页面布局。我正在使用swfObject进行嵌入。

    为了帮助其他正在寻找有关闪存阻止的规则的人,请参见下面的规则:

    • Flash内容和页面从同一域加载。
      未知的闪光物体的宽度和高度,即当Chrome获得 宽度和高度等于0或小于0
    • Flash内容是 用户在Chrome设置中列出的白名单
    • 宽度和高度 考虑到 满足于微小而重要
    • 宽度和高度 闪光对象等于或大于398x298
    • 纵横比 含量的百分比为16:9(允许偏差为0.01),且 宽度*高度区域至少为120K

    至少需要满足上述标准之一,才能将内容标记为基本内容,而不是自动暂停。尽管如此,我还是看到了一些偏差,Chrome还没有发布任何关于规则的公告。

    当Chrome暂停闪烁时,throttle事件返回
    throttle
    的状态和
    targetFrameRate
    的状态。这与它在限制Flash时返回的值相同,因为它位于后台选项卡中。所以我似乎无法区分这两者:(您可以使用JavaScript来确定
    window.focus/window.blur
    ,这将让您知道它是否位于背景选项卡中。有趣的是,我们可以尝试使用页面可见性API来检测页面是否可见,并使用滚动位置来确定flash元素是否可见,以及这两者是否都是真的,但flash被限制我们可以假设Chrome暂停了它。我意识到我们需要能够检测Flash元素是否在几秒钟内暂停,如果页面位于后台选项卡中,元素将始终被限制,因此我们无法确定它是否暂停。@RossiMilanBob我使用的解决方案是托管“.swf”与您的网页位于同一域中的文件。