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

时间:2015-09-30 22:07:25

标签: javascript google-chrome flash

跟踪Chrome的点击播放功能

如何检测Flash插件是否已暂时停用,或者相反,如果检测到Chrome浏览器的“点击播放”功能已启用?

背景

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

以下是操作中的屏幕截图(通知白色播放按钮):NFL.com Flash plugin disabled by default

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

我需要的是检测SWF何时被“点击播放”功能暂停,以便我可以禁用控件并使SWF交互。

我尝试了什么

  1. 在JavaScript中 - 虽然SWF已暂停,但通过ExternalInterface公开的所有方法仍然可用。它实际上响应它正在播放并且不会返回错误。
  2. 在JavaScript中 - 将嵌入式<object>的大小更新为&gt; 700x400px。 “点击播放”不会暂停此大小的SWF。所以,我尝试使用-webkit-transfor: scale(0.5)来使用CSS将其缩放回所需的大小。 Chrome会计算最终渲染的尺寸并暂停SWF。
  3. 在Flash中 - stage.frameRate返回正确的值(例如,它未设置为0以暂停SWF)
  4. 在写这个问题时,我找到了答案,决定在这里发帖,以防其他人需要帮助解决这个问题。

3 个答案:

答案 0 :(得分:3)

为了其他正在寻找闪存阻塞规则的人的利益,请参阅以下内容: Flash内容和页面是从同一个域加载的。 Flash对象的未知宽度和高度,即Chrome获取时的宽度和高度 宽度和高度为0或小于0。 Flash内容是 在Chrome设置中由用户列入白名单。 的宽度和高度 考虑到,Flash对象每个小于或等于5 内容是微小和必要的。 的宽度和高度 Flash对象等于或大于398x298。 纵横比 的内容是16:9,(允许的偏差为0.01)和 宽*高度面积至少为120K。 至少需要满足上述标准中的一个,以便将内容标记为“必需”而不是“自动暂停”。虽然,我看到很少有偏差,Chrome还没有公布任何有关规则的公告。

答案 1 :(得分:2)

要绕过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中管理您的SWF z-index,以及是否受到限制。

// JS Code
var IS_THROTTLED = false;

window.onThrottleEvent = function (throttleState) {
  IS_THROTTLED = (throttleState === "throttle");
}

答案 2 :(得分:2)

在页面底部添加一个大于398x298的空Flash文件。我发现,一旦您拥有至少一个Flash文件,他们的最低版Chrome就不会暂停您的任何Flash。你不能用CSS隐藏这个额外的Flash文件。 (可选)使用javascript超时(3秒)隐藏空Flash文件,以防它与您的页面布局混淆。我正在使用swfObject进行嵌入。