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 の大文字と小文字の区別に関する注意

推薦する

WeChatアプレット+EChartsで動的更新プロセス記録を実現

序文最近、小さなプログラムでリアルタイムにチャートを更新するという要件に遭遇しました。最初は wx-...

Vue.js で AntV X6 を使用する手順の例

目次0x0 はじめに0x1 インストール0x2 ノードサイドバー0x3 統合例0x0 はじめにプロジ...

Mysql データベースの高度なビュー、トランザクション、インデックス、自己接続、ユーザー管理の例の分析の使用

この記事では、ビュー、トランザクション、インデックス、自己接続、ユーザー管理など、MySQL データ...

MySQL 5.7.21 解凍版のインストールと設定方法のグラフィックチュートリアル (win10)

MySQL 5.7.21 解凍版のインストールと設定方法は参考までに。具体的な内容は以下のとおりで...

MySQLはconnect_by_isleaf MySQLメソッドまたはストアドプロシージャに似た機能を実装します

最近、特に異常なビジネス需要があり、テーブルがあります テーブル「デモ」を作成します( `id` i...

MySQLがサブクエリと結合の使用を推奨しない理由

ページ分割されたクエリを実行するには: 1. MySQL の場合、サブクエリと結合の使用は推奨されま...

Ubuntu 20.04 IPアドレスを変更する方法の例

例:本日、前回のオフィスコラボレーションプラットフォーム実験の続きをしていたところ、仮想マシンは以前...

HTML テーブル マークアップ チュートリアル (6): 暗い境界線の色属性 BORDERCOLORDARK

表では、右下の境界線の色を個別に定義したり、セルの左上の境界線の色を定義したりできます。これら 2 ...

CSS カウンターとコンテンツの概要

コンテンツ プロパティは CSS 2.1 で導入され、:before および :after 疑似要素...

JavaScript フロントエンドのタイムアウト非同期操作に最適なソリューション

目次コードの実行に長い時間がかかる場合はどうなりますか? Axiosにはタイムアウト処理機能が搭載さ...

VueでEchartsチャートの幅と高さの適応を実現する実践

目次1. インストールとインポート2. 手ぶれ補正機能を定義する3. チャートコードを描くinit ...

Linuxサーバ侵入緊急対応記録(概要)

最近、お客様から支援の依頼を受けました。管理されている通信コンピュータ ルームから、サーバーの 1 ...

JS の精度外数値問題の解決

精度の問題に対する最もわかりやすい説明たとえば、1÷3=0.33333333...という数字は、3が...

CSSを使用して炎の効果を作成する方法

本文は以下から始まります。 123WORDPRESS.COM ダウンロード:純粋な CSS3 で超リ...

構造とプレゼンテーションの分離を理解するためのWeb標準の学習

Web 標準について議論するときに必ず話題になるのは、構造とプレゼンテーションを分離することの重要性...