4

アニメーション付きの Flash を使用するページがあります (これらは重要ではありませんが、追加的なものです)。

Turbo を有効にして Opera を使用していなければ、すべて正常に動作します。次に、Flash ムービーは、Flash の再生ボタンとして機能することを意図した、Flash ムービーのサイズの円の中に大きな醜い矢印として表示されます。

私は SWFobject を使用しているので、Opera のターボ メカニズムが使用されているかどうかを知っていれば簡単にアニメーションをオフにすることができましたが、JavaScript (またはこれがうまくいく場合は CSS) でこれを行うにはどうすればよいですか?


再現する方法は?
Opera (またはフラッシュを使用するその他のページ) でこのページを閲覧する
http://www.adobe.com/software/flash/about/
Opera Turbo を使用しない場合、フラッシュ アニメーションとフラッシュのバージョン情報が表示されます Opera Turbo を使用すると、2 つの白い矢印が表示されます灰色の円で


編集 1 純粋な JS ソリューションも PHP ソリューションも存在しないことは確かです。最良の推測は、AS/JS ソリューションを組み合わせたものです。

4

3 に答える 3

5

クライアント側の検出: 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 はリクエストを仲介しないことに注意してください。

それが役に立てば幸い。

于 2012-01-14T03:11:33.250 に答える
2

速度の問題に対する答えは、Flash コンテンツが最初にダウンロードされないことだと思います。ダウンロードするには、アイコンを手動でクリックする必要があります。アニメーション GIF も同様です。これは、速度を上げるための戦略の一部です。(この Opera Desktop チームの投稿を参照してください。)

これが、Opera だけでなく、Opera Turboをチェックする方法を知りたい理由です。私のローカル テストでは、PHP の _SERVER["HTTP_USER_AGENT"] 変数を使用しても違いがわかりません。これは、こことここに示されているように、Opera がユーザー エージェント文字列としてリストするものと似ていると思います。

ウェブサイトにブラウザの状態を通知するのではなく、Opera はリクエスト結果を別の方法で黙って管理しているようです。

于 2012-01-13T23:43:44.377 に答える
2

フラッシュ オブジェクトに 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>

フラッシュがブロックされていることを検出した場合は、すべてのフラッシュ オブジェクトを非表示にして、必要なものを表示します。

編集: このコードは Firefox では機能しません。おそらく、この関数を使用する前にブラウザーを検出する必要があります。

于 2012-01-19T22:09:39.243 に答える