HTMLページ埋め込み動画とJSコントロール切り替え動画例の詳しい説明

HTMLページ埋め込み動画とJSコントロール切り替え動画例の詳しい説明
まず、ページにビデオを埋め込むための HTML コードは次のとおりです。

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

<div id="youku" class="youku">
<オブジェクト id="obx" 名前="obx" 幅="290" 高さ="260">
<param name="映画" value="http://www.tudou.com/v/6HJvxxkarzk/&resourceId=0_04_11_19/v.swf"></param>
<param name="allowFullScreen" 値="true"></param>
<param name="allowscriptaccess" value="always"></param>
<param name="wmode" value="不透明"></param>
<embed src="http://www.tudou.com/v/6HJvxxkarzk/&resourceId=0_04_11_19/v.swf" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="opaque" width="290" height="260"></embed>
</オブジェクト>
</div>

object タグとembed タグは、より多くのブラウザと互換性を持たせるために一緒に使用されますが、2 つのタグの下で同じ属性値が一貫していることを確認してください。
PS: <object> タグと <embed> タグおよびその属性の概要と使用方法については、OBJECT タグと EMBED タグの記事を参照してください。

次に、JS を使用して埋め込まれたビデオのアドレスを動的に変更し、次のビデオを再生するという目的を達成する方法について説明します。
このとき、多くの人は、タグ名または DOM メソッドを使用して、上記の param ノードの value 属性と、embed ノードの src 属性を見つけ、JS 動的割り当てを使用してアドレスを変更することをすぐに思いつくでしょう。しかし、テストの結果、ビデオのアドレスは置き換えられたにもかかわらず、ページに表示されるビデオは同じままであることがわかり、不可解でした。

埋め込みオブジェクトのすべてのパラメータは、ページがロードされるときに初期化されることがわかりました。再ロードすることによってのみ、次のビデオの再生に切り替えることができます。アドレス属性値を変更するだけでは機能しません。会社の従業員と同じように、住所は変更(転居)しましたが、彼は依然として同じ従業員であり、別人ではありません。
これをリロードするために私がよく使用する方法は 2 つあります (上記のコードを例に挙げます)。
①JSのobj.innerHTMLメソッドを使用してオブジェクト全体をリセットします。

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

/*機能: ビデオを動的に切り替える*/
関数setvideo(url){
var youku = document.getElementById("youku");
var htmlstr = "<オブジェクト id='obx' 名前='obx' 幅='290' 高さ='260'>";
htmlstr += "<param name='movie' value='"+url+"'></param>";
htmlstr += "<param name='allowFullScreen' value='true'></param>";
htmlstr += "<param name='allowscriptaccess' value='always'></param>";
htmlstr += "<param name='wmode' value='opaque'></param>";
htmlstr += "<embed src='"+url+"' type='application/x-shockwave-flash' allowscriptaccess='always' allowfullscreen='true' wmode='opaque' width='290' height='260'></embed>";
htmlstr += "</object>";
youku.innerHTML = htmlstr;
}

② div コンテナ内に iframe を配置し、現在の親ページに影響を与えずに iframe 内のページを動的に更新できるようにします。
具体的なコードは書きませんが、大まかな考え方は次のとおりです。
1. URL を使用して値を渡します。
2. 親ページまたは子ページは、子ページが取得するアドレスを動的に保存するための隠しドメインを作成します。
3. 方法①を使用してサブページ内のオブジェクトをリセットします。
4. window.open などの他の方法は回りくどいので推奨されません。
これまでに、ビデオ切り替えの埋め込みと制御に成功しました。しかし、偶然、私は問題を発見しました。
新しいビデオに切り替えた後、「更新」をクリックしたり、F5 キーを押すなど、何らかの方法でページを更新すると、「オブジェクトが見つかりません」というスクリプト エラーがポップアップ表示されます。エラー コードを見つけたところ、Flash の内部スクリプト エラーであることがわかりました。

関数__flash__removeCallback(インスタンス、名前) {
インスタンス[名前] = null;
}

ページでフラッシュが使用されており、フラッシュで flash.external.ExternalInterface.addCallback メソッドが使用されている場合、ページが更新されると、__flash__removeCallback の js エラーが報告されます: オブジェクトが見つかりません (行 53)、(Jscript-scriptblock)。この関数は以下から呼び出されます:

__flash__removeCallback(document.getElementById(""), "dewprev");

明らかに、document.getElementById("") は null を返すため、__flash__removeCallback はエラーを報告します。flash の組み込みメソッドは次のように記述する必要があると思います。

関数__flash__removeCallback(インスタンス、名前) {
インスタンスが null の場合、インスタンス[名前]は null になります。
}

誰かがテストした結果、document.getElementById("") がフラッシュ コントロール オブジェクトの id/name 属性を取得するために使用されていることがわかりました。このエラーの原因は、オブジェクトに id/name 属性が設定されていないことです。設定後はエラーは発生しません。しかし実際には、私のオブジェクトにはすべて id/name 属性があるため、この理由には同意できません。このことから、ID/名前を追加するこの方法は一部の人にとっては問題を解決できることがわかりますが、これがこの問題を引き起こす唯一の理由ではありません。

その後、長い間探し回って、ついに海外のウェブサイトで解決策を見つけました。それは Dave Smith という男性によって書かれていました。私は彼のコードを基にいくつかの改良を加え、常にコードを実行するページの負担を軽減しました。彼が提供したコードは次のとおりです。

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

<script type="text/javascript">
(関数(){
var setRemoveCallback = 関数(){
__flash__removeCallback = 関数(インスタンス、名前){
if (インスタンス){
インスタンス[名前] =null;
}
};
ウィンドウのタイムアウトを設定します(コールバックの削除、10);
};
コールバックを削除します。
})();
</スクリプト>

彼が言いたかったのは、フラッシュ内のスクリプトを書き換えると現在の問題は解決できるが、オブジェクトがロードされた後のある時点で、フラッシュ内のスクリプトが書き換えた関数を上書きしてしまうということだ。したがって、必要なときにプレイヤーがオーバーライドした関数を呼び出すという保証はありません。この目標を達成するために、フラッシュに用意された関数を 10 ミリ秒ごとに上書きする関数を設定しました。これで問題は解決します。同時に、彼はこのコードを簡略化して、次の 2 つの「バージョン」を作成しました。
簡易版1: 少しシンプル

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

<script type="text/javascript">
var setRemoveCallback = 関数() {
__flash__removeCallback = 関数(インスタンス、名前) {
if(インスタンス) {
インスタンス[名前] = null;
}
};
ウィンドウのタイムアウトを設定します(コールバックの削除、10);
};
コールバックを削除します。
</スクリプト>

簡易版2: 超シンプル

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

<script type="text/javascript">(function(){var s=function(){__flash__removeCallback=function(i,n){if(i)i[n]=null;};window.setTimeout(s,10);};s();})();</script>

私はしばらくそれについて考え、自分の考えを整理しました。
このエラーは、ページを更新するときに発生します。ページを更新するプロセスでは、古いページが破棄され、新しいページが再読み込みされます。理論的には、新しいページをリロードしても問題はないはずなので、古いページが消える前の「余波」作業中にエラーが発生します。ページが消える前にフラッシュ内のコールバック関数を書き直すことで、同じ目的を達成できます。コードは次のようになり、テストは合格します。

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

/*ビデオ切り替えの内部スクリプトエラーを解決する*/
<script type="text/javascript">
関数 endcall(){var s=function(){__flash__removeCallback=function(i,n){if(i)i[n]=null;};window.setTimeout(s,10);};s();}
window.onbeforeunload = 終了呼び出し;
</スクリプト>

<<:  MySQLのREDOログとUNDOログの詳細な説明

>>:  おすすめの無料英語手書きフォント20選

推薦する

HTML ページの先頭に戻るいくつかの実装の概要

最近、ウェブサイトを開発する際にトップに戻るボタンを作成する必要がありますが、私は主にバックエンドの...

jQuery の CSS スタイル属性 css() と width() の完全ガイド

目次1. css() の基本的な使用法: 1.1 CSSプロパティを取得する1.2 CSSプロパティ...

JavaScript と JQuery フレームワークの基本チュートリアル

目次1. JS オブジェクトDOM –1、機能–2、テスト3. jQuery –1. 概要–2、使用...

ウェブデザイン:大量の素材の正確な配置と使用

3回の暗記により、大量の資材の正確な場所と目的を記憶でき、その使いやすさが向上します。 これは単なる...

EDMをHTMLで記述する際の注意点まとめ(メール送信時の一般的な注意点)

フォーマットエンコーディング1. ページの幅は600~800px、長さは1024px以内に設定してく...

vue3で注意すべき2つのポイントを詳しく解説:セットアップ

目次vue2の場合vue3ではセットアップに関する注意事項セットアップライフサイクルは、before...

JS は複数のタブを切り替えるカルーセルを実装します

カルーセルアニメーションは、ページの外観とインタラクティブなパフォーマンスを向上させることができます...

Linux の圧縮および解凍コマンドの紹介

目次一般的な圧縮形式: gz .bz2 .xz .zip一般的に使用されるアーカイブは圧縮を必要とす...

HTML5+CSS3コーディング標準

黄金律プロジェクトに何人の人が取り組んでいるかに関係なく、すべてのコード行が同じ人によって書かれたよ...

Vue フロントエンドの Excel ファイルのエクスポートの詳細な実装計画

目次1. 技術の選択2. 技術的な実装vue-json-excelプラグインを使用して実装1. vu...

nginx ロケーション優先度の詳細な説明

場所表現タイプ~ は大文字と小文字を区別して通常の一致を実行することを示します~*は大文字と小文字を...

Ubuntu Server でのワイヤレス ネットワーク カードの詳細な設定

1. ワイヤレス ネットワーク カードを挿入し、コマンドiwconfigを使用してワイヤレス ネット...

Linux ディスクとディスク パーティションを理解するための記事

序文Linux システムのすべてのハードウェア デバイスは、ファイルの形式で表現され、使用されます。...

MySQL 8.0.20 圧縮版のインストールチュートリアル(画像とテキスト付き)

1. MySQL ダウンロード アドレス。 http://ftp.ntu.edu.tw/MySQL...

MySQL のあまり知られていないソート方法

序文ORDER BY 字段名升序/降序、このソートステートメントは皆さんご存知だと思いますが、特殊な...