【问题标题】:Is Opera Turbo on?Opera Turbo 开启了吗?
【发布时间】:2012-01-11 09:42:10
【问题描述】:

我有一个使用带有动画的 Flash 的页面(这些不是重要的,而是附加的)。

如果我没有使用激活 Turbo 的 Opera,一切正常。然后 Flash 影片显示为一个大而丑陋的箭头,圆圈中的大小与 Flash 影片大小相同,旨在充当 Flash 的播放按钮。

我正在使用 SWFobject,所以如果我知道是否使用了 Opera 的 turbo 机制,我可以轻松地关闭动画,但是我如何在 JavaScript(或者如果使用 CSS)中做到这一点


如何重现?
使用 Opera 浏览此页面(或任何其他使用 flash 的页面)
http://www.adobe.com/software/flash/about/
如果没有 Opera Turbo,您会看到 Flash 动画和 Flash 版本信息 在 Opera Turbo 中,您会看到两个灰色圆圈中的白色箭头


编辑 1 我现在很确定,没有纯 JS 解决方案,也没有 PHP 解决方案。最好的猜测是组合 AS/JS 解决方案。

【问题讨论】:

  • 你还能绕过 Opera 中的按需插件吗?
  • @c69 我对此一无所知。我不认为这是问题所在。我只是打开 Turbo 就可以了。 Flash 已安装,如果您单击播放按钮,则 Flash 开始播放。
  • 对主题感到抱歉,但是在问题中添加赏金需要什么?我已阅读常见问题解答,但似乎找不到。
  • @Johan 您需要在提出问题后等待 2 天。然后你可以添加赏金

标签: javascript flash opera opera-turbo


【解决方案1】:

客户端检测: 无法通过 javascript 访问它。 Opera turbo 的客户端检测目前是不可能的,也许将来会支持,但谁知道呢?

服务器端检测: 启用 Opera turbo 后,来自客户端的所有请求都发送到 Opera 服务器,Opera 服务器将访问您的应用程序(进行压缩)并将处理后的内容转发到最终客户端(用户的计算机)。

考虑到这一点,让我们做一些网络嗅探,看看你的连接在哪里:

~$ nslookup opera10beta-turbo.opera-mini.net
>Server:        189.40.226.80
>Address:   189.40.226.80#53
>Non-authoritative answer:
>opera10beta-turbo.opera-mini.net   canonical name = global-turbo-1.opera-mini.net.
>Name:  global-turbo-1.opera-mini.net
>Address: 141.0.11.252

~$ nslookup 64.255.180.252
>Server:        192.168.1.254
>Address:   192.168.1.254#53
>Non-authoritative answer:
>252.180.255.64.in-addr.arpa    canonical name = 252.0-24.180.255.64.in-addr.arpa.
>252.0-24.180.255.64.in-addr.arpa   name = global-turbo-1-lvs-usa.opera-mini.net.

正如您所见,opera 服务器的名称和规范名称可用于检测您的应用程序是否正在通过 opera 服务器中介进行访问。我认为服务器端编码可以解决这个问题(不确定您在服务器上使用的是什么语言)。

请记住,如果您正在访问本地服务器中的某些内容,Opera Turbo 不会为您的请求提供中介。

希望对你有帮助。

【讨论】:

  • 另外,Opera 在使用 Turbo 时会发送一个 X-Forwarded-For 标头,其值为用户的实际 IP。如果您正在比较 dns 以检查 Turbo,请务必检查是否存在 X-forwarded-for。还值得注意的是,Opera Mini 内容始终通过 Opera 的服务器传输。
  • 这似乎是一个很好的答案,但我认为不能保证与 Opera turbo 的每个连接实际上都被压缩。如果您的网络连接速度足够快,opera 将不会通过 opera 服务器重新路由请求,但仍不会播放 swf。
  • @JaniHartikainen 很好的信息,我没有将其包含在答案中,因为我认为代理后面的每个用户也会创建此标头。但是 X-forwarded-for 可用于过滤要检查的请求,而不是检查每个申请。避免每种情况下的性能损失可能很有趣。
  • @yunzen 说得好。我喜欢这个功能,因为 Opera Turbo 也可以充当某种添加阻止程序。但是当涉及到闪存时,它给我的答案配置了一个缺点。这可能是开发人员不应该担心的非获胜情况,激活opera turbo的用户​​可能会理解这种行为是浏览器功能而不是网站中的错误(就像来自其他浏览器的任何添加阻止插件一样)。
  • 这个想法不是使用服务器名称整个字符串,而是一起寻找像opera和turbo这样的关键字。但是,是的,没有什么能比忍者功能 + 用户配置的组合更好。
【解决方案2】:

您可以尝试检查 Flash 对象是否加载了一些 javascript。此代码适用于我的带有 Opera 11 的计算机:

<html>
<head>
  <script language=JavaScript>
    function isFlashBlocked(){
      var blocked;
      try {
        // Can test this on any flash object on the page
        window.document.myFlash.SetVariable("dummy", "dummy");
        // Flash not blocked
        blocked = false;
      }
      catch(err) {
        // Flash blocked
        blocked = true;
      }

      return blocked;
    }

    function removeBlockedFlash() {
      if (isFlashBlocked()) {
        // Hide all flash objects
        window.document.myFlash.setAttribute("style", "display: none");
        // ...

        // Display replacement content
        window.document.myImage.setAttribute("style", "display: inline");
        // ...
      }
    }
  </script>
</head>
<body onload="removeBlockedFlash()">
  <object type="application/x-shockwave-flash" data="HelloWorld.swf" 
          width="100" height="100" id="myFlash">
  </object>
  <img src="image.jpg" style="display: none" id="myImage" />
</body>
</html>

如果您检测到 flash 被阻止,您将隐藏每个 flash 对象并显示您想要的内容。

编辑:此代码不适用于 Firefox,您可能需要在使用此功能之前检测浏览器。

【讨论】:

  • +1 这是非常独立的opera turbo,可以判断flash是被加载还是被阻塞!还是没有办法避开丑陋的白色按钮对吧?
  • 也就是说,我需要在页面上的任何位置使用虚拟 1x1 闪存?这仅适用于 ExternalInterface?
  • @yunzen 您不需要虚拟闪存对象,因为页面上已经有一些闪存。我认为您不需要修改您的页面或 Flash 代码,您只需添加带有现有 Flash 对象之一的 id 的 javascript。如果您检测到 Flash 被阻止,则删除/隐藏 &lt;object&gt;(使用 javascript 修改 DOM)并添加/显示您想要显示的内容。
  • @Lesque 但我有一个问题,被阻止的 Flash 看起来很丑。我可以在当前正在加载的闪存上设置一个变量吗?所以没有被屏蔽的时候我不移除flash?
  • @yunzen 我用更完整的例子编辑了答案。它显示了如果 flash 被阻止,如何用图像替换 flash。
【解决方案3】:

我相信速度问题的答案是最初没有下载 Flash 内容。您必须手动单击图标才能下载它。动画 GIF 也是如此。这是提高速度的策略的一部分。 (参见this Opera Desktop Team post。)

这就是为什么您想知道如何检查 Opera Turbo,而不仅仅是 Opera。从我的本地测试中,我无法区分使用 PHP 的 _SERVER["HTTP_USER_AGENT"] 变量。我认为这类似于 Opera 列出的用户代理字符串 as shown herehere

Opera 似乎不是通知网站浏览器状况,而是默默地管理请求结果的方式不同。

【讨论】:

  • 我不确定是否在激活 Turbo 的情况下没有下载 Flash。我记得某种节省处理器性能的原因。但我不确定。
  • @yunzen,请查看 Opera 博客文章的链接。这就是我用来验证我的声明的方法。
  • 这是从 2009 年开始的。也许从那以后发生了变化
  • 嗯,您可以随时检查 SWF 是否真的在页面上,对吧?而那似乎是一石二鸟。 . .应该有 Flash 的地方没有 Flash(连同 Opera 用户代理字符串)是确定 Turbo 已激活的一个很好的方法。
  • 正如我在 marcioAlmada 的另一个答案中的 cmets 中所说:'我认为不能保证与歌剧涡轮增压的每个连接都被实际压缩。如果您的网络连接速度足够快,opera 将不会通过 opera 服务器重新路由请求,但仍不会播放 swf。所以这不是安全的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
相关资源
最近更新 更多