HTML に埋め込まれた Flash HTML ウェブページ コードに Flash ファイルを埋め込むソリューション (パート 2)

HTML に埋め込まれた Flash HTML ウェブページ コードに Flash ファイルを埋め込むソリューション (パート 2)
上の記事で、SWFObject V1.5 の使い方の紹介は一旦終了です。これから、SWFObject V2.1 を紹介します。もっと早く V2.1 を知っていたら、「HTML DOM の読み込みを待つ」問題に悩まされることはなかったかもしれません。

まず、V2.1 構文の呼び出し例を簡単に紹介します。

コードをコピー
コードは次のとおりです。

<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript">
//1. Jsonを使用して変数、パラメータ、プロパティを初期化する
var フラッシュ変数 = {
名前1: 「こんにちは」
名前2: "世界",
名前3: "foobar"
};
var パラメータ = {
メニュー: "false"
};
var 属性 = {
id: "dynamicContent2"、
名前: "dynamicContent2"
};
swfobject.embedSWF("test6_flashvars.swf", "content2", "300", "120", "6.0.0", "expressInstall.swf", flashvars, params, attribute);
//2. 従来の初期化設定、効果は同じ
var フラッシュ変数 = {};
flashvars.name1 = "こんにちは";
flashvars.name2 = "ワールド";
flashvars.name3 = "foobar";
var パラメータ = {};
パラメータ.menu = "false";
var 属性 = {};
属性ID = "dynamicContent3";
属性名 = "dynamicContent3";
swfobject.embedSWF("test6_flashvars.swf", "content3", "300", "120", "6.0.0",
"expressInstall.swf"、フラッシュ変数、パラメータ、属性);
//3. 最後に、1文だけで簡潔かつ力強く、先延ばしせずに直接書きます。
swfobject.embedSWF("test6_flashvars.swf", "content5", "300", "120",
"6.0.0", "expressInstall.swf", {name1:"hello",name2:"world",name3:"foobar"}, {menu:"false"}, {id:"dynamicContent5",name:"dynamicContent5"});
</スクリプト>

個人的には、上記の 3 番目の書き方を好みます。以下で説明するように、HTML コードに Flash ファイルを埋め込むための最終的な解決策は、swfobject.embedSWF() を呼び出す 3 番目のスタイルを使用することです。 V2.1 のスタイルは最新の JS のスタイルと非常に一致しており、コードはより簡潔になっています。

前の記事で採用したソリューションは、ほとんどのニーズを満たすことができ、互換性も受け入れられるようです。ほとんどの友人のニーズを満たすことができ、受け入れられるソリューションでもあります。しかし、私はさらに極端な状況を発見しました。
コードをコピー
コードは次のとおりです。

新しい SWF オブジェクト ("http://www.pec365.com/Flash/20071113.swf", "mymovie", "304", "367", "7", "#FFFFFF");

渡された Flash ファイルのアドレスが間違っている場合、または Flash ファイルがサーバー上で削除されている場合、以下に示すように、望ましくない状況が発生します。

コードをコピー
コードは次のとおりです。

<html>
<title>デモ</title>
<ヘッド>
<script type="text/javascript" src="swfobject_source.js"></script>
</head>
<本文>
<フォームid="フォーム1">
<div id="flashcontent">
<a href="http://www.adobe.com/go/getflashplayer">
<img src="upload/2022/web/get_flash_player.gif" alt="Adobe Flash Player を入手" border="0" />
</a>
</div>
</フォーム>
<script type="text/javascript">
// Flash ファイル名の前に f を追加したことに注意してください。
var so = new SWFObject("http://www.pec365.com/Flash/f20071113.swf", "mymovie", "304", "367", "7", "#FFFFFF");
次のように記述します。
</スクリプト>
</本文>
</html>

このコードは自分で実行することをお勧めします。初心者の場合は、前の記事で紹介した手順を参照してこのコードを実行し、「災害」の到来を実際に感じることができます。

はい、ページが空白になり、Flash が表示できない場合に画像を置き換えるために最初に使用された画像も消えていることがわかります。どこに行ったのでしょうか?デバッグ後、渡された Flash ファイルのアドレスが間違っていても、誤った <object [……]></object> タグが作成され、<div id="flashcontent">[……]</div> 内のコンテンツが置き換えられ、高さ 304 ピクセル、幅 367 ピクセルの空白領域が表示されることがわかりました (Flash プレーヤーをインストールしている場合は、画面の左上隅を右クリックすると見つかります)。そして悪夢が始まります。

この悪夢のような結果を解決するために、私は悪いアイデアを思いつきました。まず、渡された Flash ファイルのアドレスに基づいて、ファイルがサーバー上に実際に存在するかどうかを確認します。返された結果が Flash ファイルが存在するというものであれば、swfobject.embedSWF() メソッドを実行します。具体的なアイデアは、XMLHttpRequest オブジェクトを使用して GET/HEAD メソッドを通じてサーバーに要求し、xmlHttp.status == 200 || xmlHttp.status == 302 をファイルの存在の根拠として判断することです。ただし、この方法には特定の欠陥があるようです。まだ改善できていません。最終的な解決策の例を以下に示します。

コードをコピー
コードは次のとおりです。

<html>
<title>デモ</title>
<ヘッド>
<script language="javascript" type="text/javascript" src="JavaScript/swfobject.js"></script>
<script type="text/javascript">
(関数() {
var xmlHttp、
結果、
flashURL = "http://www.pec365.com/Flash/20071113.swf";

var checkFlashURL = 関数(url) {
xmlHttp = GetXmlHttpObject();
xmlHttp.onreadystatechange = 関数() {
xmlHttp.readyState == 4 の場合
xmlHttp.status == 200 の場合 ||
xmlHttp.status == 302 ) {
戻り値 (結果 = true);
}
}
};
xmlHttp.open("HEAD", url, true);
xmlHttp.send(null);
};
var GetXmlHttpObject = 関数() {
var xmlHttp = null;
試す {
// Firefox、Opera 8.0+、Safari
xmlHttp = 新しい XMLHttpRequest();
}
キャッチ(e){
// インターネットエクスプローラー
試す {
// 古いIE
xmlHttp = 新しい ActiveXObject("Msxml2.XMLHTTP");
} キャッチ (e) {
// 新しいIE
xmlHttp = 新しい ActiveXObject("Microsoft.XMLHTTP");
}
}

xmlHttp を返します。
};
// 指定されたFlashファイルがサーバー上に存在するかどうかを確認するために使用されます
フラッシュURLをチェックします。
window.onload = 関数() {
if ( 結果 ) {
swfobject.embedSWF(flashURL、"flashcontent"、"304"、"367"、"10.0.0"、"expressInstall.swf"、{}、{quality:"autohigh"、wmode:"transparent" }、{});
}
それ以外 {
window.alert("Flash アドレスが無効です。よく確認してください"); // デバッグ中に Flash アドレスが正しいかどうかを確認するために使用されます
}
}
})();
</スクリプト>
</head>
<本文>
<フォームid="フォーム1">
<div id="flashcontent">
<a href="http://www.adobe.com/go/getflashplayer">
<img src="upload/2022/web/get_flash_player.gif" alt="Adobe Flash Player を入手" border="0" />
</a>
</div>
</フォーム>
</本文>
</html>

うわー、この2つの記事に数時間費やしました。うっかりして夜10時近くまで会社に残ってしまい、警備員が追い出されてしまいました。早く終わらせたいです。明日仕事で時間があるときに文章を磨こうと思います、ハハ。

<<:  JavaScript の基礎: 即時実行関数

>>:  MySQL の大文字と小文字の区別に関する注意

推薦する

mysql 5.7.11 winx64.zip インストールと設定方法のグラフィックチュートリアル

MySql データベース システムをインストールして構成します。 1. ダウンロード http://...

VUE 応答性原理の詳細な説明

目次1. 応答原理の基盤2. コアオブジェクト: Dep と Watcher 3. 依存関係を収集し...

CSS3は円錐グラデーション効果を実現します

文法:背景画像: 円錐グラデーション(位置の角度から、開始色、...、最後の色)最初のパラメータ:開...

ネイティブJavaScriptでカルーセルを実装する

この記事では、JavaScriptでカルーセルを実装するための具体的なコードを参考までに紹介します。...

Web ページ制作におけるテーブル属性 CellPad、CellSpace、Border の説明と使用

cellspacing は表内のセル間の距離です。セルパディングは、表のセル内の空白スペースです。一...

CocosCreator でレイヤー管理に常駐ノードを使用する方法

CocosCreator バージョン: 2.3.4ほとんどのゲームにはレイヤー管理機能があり、例えば...

Vue.js フロントエンド Web ページ ポップアップ非同期動作例の分析

目次1. 序文2. ポップアップコンポーネントを2つ見つける3. 自分で作る3.1. Promise...

ViteでReactプロジェクトを構築する方法

目次序文Viteプロジェクトを作成する改修プロジェクトディレクトリの規則その他の構成序文毎日鳩、火ば...

HTML レイヤード ボックス シャドウ効果のサンプル コード

まず、画像を見てみましょう。今日はこのエフェクトを作成します。 実は、何でもないんです。Web ペー...

JavaScriptプロトタイプと例の詳細な説明

目次コンストラクタインスタンスとプロトタイプの関係プロトタイププロパティ属性またはメンバーの検索原則...

MySQL 5.7 で業務を停止せずに従来のレプリケーションを GTID レプリケーションに変更する例

GTID の利点により、従来のファイル POS ベースのレプリケーションを GTID ベースのレプリ...

Javascript サンプル プロジェクトでの虫眼鏡効果の実装プロセス

目次序文事例: JD.com の虫眼鏡効果の模倣オフセットシリーズクライアントシリーズスクロールシリ...

js データ型とその判定方法の例

js データ型基本データ型: 数値、文字列、ブール値、未定義、null、シンボル、参照データ型: オ...

MySQL のソートとページング (order by と limit) と既存の落とし穴

並べ替えクエリ (order by)電子商取引の場合: 今日完了したすべての注文を表示し、取引金額に...

Linux で Docker を使用して MySQL をインストールする手順

テスターとして、学習プロセス中に Linux でソフトウェアをインストールする必要が頻繁にある場合が...