如何检测Chrome的"点击播放"Flash阻止功能何时处于活动状态

pot*_*nch 13 javascript flash google-chrome

跟踪Chrome的即点即用功能状态

您如何检测到Flash插件已被暂时禁用,或者相反,如果检测到Chrome已启用,则会因Chrome的"点击播放"功能而启用?

背景

Chrome的新"点击播放"功能会检测不明显的插件,并暂停它们.Chrome在插件上显示"播放"按钮,用户可以点击"播放"按钮激活插件.(参考:https://productforums.google.com/forum/#!topic /rome/xPcpRBzyPcc)

这是它在行动中的截图(注意白色播放按钮): 默认情况下禁用NFL.com Flash插件

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

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

我试过的

  1. 在JavaScript中 - ExternalInterface虽然SWF暂停,但仍然可以使用所有暴露在外的方法.它实际上响应它正在播放并且不会返回错误.
  2. 在JavaScript中 - 将嵌入的大小更新<object>为> 700x400px."点击播放"不会暂停此大小的SWF.因此,我尝试-webkit-transfor: scale(0.5)使用CSS将其缩放回所需的大小.Chrome计算最终渲染大小并暂停SWF.
  3. 在Flash中 - stage.frameRate返回正确的值(例如,它未设置为0以暂停SWF)

在写这个问题时,我找到了答案,决定在这里发帖,以防其他人需要帮助解决这个问题.

pot*_*nch 2

要规避 Chrome 点击播放限制,请从与您的网站相同的域和协议加载 SWF。


您可以使用 AS3ThrottleEvent来检测 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 
}
Run Code Online (Sandbox Code Playgroud)

您可以设置一个ExternalInterface调用来在 JavaScript 中跟踪此状态,并z-index根据 SWF 是否受到限制在 JavaScript 中进行管理。

// JS Code
var IS_THROTTLED = false;

window.onThrottleEvent = function (throttleState) {
  IS_THROTTLED = (throttleState === "throttle");
}
Run Code Online (Sandbox Code Playgroud)