3

現在表示されているウィンドウを超えて垂直方向に何倍も伸びる一連の行に約100個のフラッシュグラフ(およびその他のDOMのもの)をレンダリングする必要があるアプリケーションがあります。つまり、ユーザーは下にスクロールしてすべてを表示する必要があります。さまざまなグラフ。

このアプリケーションも動的であり、ユーザーがDOM(ページ上の任意の場所)の値を変更すると、その変更をすべてのFlashグラフに同時に伝播する必要があります。

そこで、すべてのexternalInterfaceコールバックを設定し、非常に重要な「flashIsReady」呼び出しまでJSが開始されないように注意しました。そして、既存のswfを新しいデータでupdate()しようとするまで、うまく機能しました。

動作は次のとおりです。-IE/Foxの両方で(最初は)すべてのswfsがロードされる=良好。-新しいコンテンツでswfsを更新することはIEでは機能しますがFoxでは機能しません=良くありません-新しいコンテンツでswfsを更新することはFoxで機能します--のみ-ページの一番下までスクロールしてから一番上に戻ります--BEFORE- -update()をトリガーしました。

そこで、JSと呼ばれるswfが「フラッシュの準備ができました」と言うたびにトレースを開始しました。Firfoxはswfが表示されるときにのみレンダリングすることに気付きました。そして正直に言うと、それは問題ありません。実際、IEもこれを実行していると確信しています。しかし、問題は、Firefoxがswfを初期化しないだけでなく、まだ表示されていない場合、Firefoxはswfが存在することを認識しないことです(オンロード後を想定)。

そしてその証拠は、次のようなJSエラーが発生することです。

「[FlashDOMID].FlashMethodは関数ではありません」。

ただし、少し下にスクロールして、表示されるまで待ち、突然トレースが点灯し始めます

「フラッシュレディ」、「フラッシュレディ」、「フラッシュレディ」、そしてそれらがすべて準備ができたら、すべてが正常に動作します。

FFは表示されるまでswfを初期化しないと誰かが私に言いました-私はそれを強制できますか?必要に応じてコードを投稿できます...しかし、かなり重い(残りの部分から関連するものを取り除くのは難しい)ので、可能であれば(あなたのために)それを避けたいと思います。

質問は簡単です-あなたはこれが起こったことがありますか?もしそうなら、あなたは解決策を見つけましたか?まだ見えていないswfを強制的に初期化する方法はありますか?みんなありがとう。

4

3 に答える 3

3

それで...

たくさんのフォーラム検索の後、私は同意します、これを行うための優雅な方法はありませんハハ!私が最終的に行った解決策は、基本的に$(document).ready()で各swfのJSオブジェクトを作成することでした。

基本的に、JSオブジェクトには、「data」や「isReady」などのさまざまな値があります。swfが表示され、JSを呼び出して「準備ができました」と言うと、その呼び出しをキャッチし、参照しているJSオブジェクトを見つけます(各swfのDOM IDをその1つとして渡すことでこれを行うことができました) flashVars;はい、それは私を汚く感じさせました)。そこから、基本的には、操作を試みる前に、各JSに「isReady」があることを確認するだけのゲームでした。

この混乱全体のほんの少しの優雅さは、JSオブジェクトを使用することで、それぞれのJSオブジェクトの「data」プロパティを更新するだけで「隠された」swfsに新しいデータを適用できることでした。その後、swfが最終的に表示されるようになったとき、私はそれが持っていたデータ(つまり、現在のデータ)を更新するだけで、かなりうまく機能しましたが、そうです、この状況全体が不幸であることに同意します。

だから...*答えた。

于 2010-05-05T23:20:31.403 に答える
1

私はこれがおそらく遅い答えであることを知っています。

ただし、wmodeをopaqueからwmode = "window"に変更する必要があります。そのため、Firefoxでは正しく機能しません。IEは同じことを行いますが、最初のページの読み込み時のみです。

wmodeを不透明に設定すると、Firefoxはブラウザに表示されるまでswfを初期化しません。ただし、これはすべてのブロワーで同じではありません。IEは最初のページビューでのみそれを投与し、クロムとサファリはそれをまったく行いません。

残念ながら、私はこの質問が反対を探しているのを見つけました。ブラウザ内に表示されるまで、すべてのブラウザでプレーヤーを初期化しないようにしようとしています。

于 2010-11-23T22:49:59.277 に答える
-1

ページの初期化後に要素を再配置し、ロードを開始してから再び非表示にする以外に、フラッシュのロードを強制する良い方法を実際に見つけたことはありません(安くて厄介ですが、機能しているようです)。

すべてのフラッシュ要素をページの左上隅に配置し(ページの読み込み時に表示されるようにするため)、JavaScriptのpageLoad関数を使用して、必要に応じて要素をページの下部に再配置します。Jqueryを使用すると、addClass()関数とremoveClass()関数を使用して、これをすべて非常に簡単に行うことができます。

于 2010-05-05T07:58:43.473 に答える