In HTML eingebettetes Flash Lösung zum Einbetten von Flash-Dateien in den HTML-Webseitencode (Teil 1)

In HTML eingebettetes Flash Lösung zum Einbetten von Flash-Dateien in den HTML-Webseitencode (Teil 1)

Nach chinesischem Brauch feiern wir das neue Jahr noch vor dem fünfzehnten Tag des ersten Mondmonats. An dieser Stelle möchte ich Ihren Freunden im Garten ein frohes neues Jahr wünschen.
Es kam vor, dass die Homepage des Unternehmens in diesen Tagen überarbeitet werden musste. Nach dem „Personalabbau“ des Unternehmens Ende letzten Jahres musste eine Person die Arbeit mehrerer Personen erledigen, und plötzlich war die Belastung groß. Nun, das lag ursprünglich nicht in meinem Aufgabenbereich, aber leider war ich daran beteiligt. Das Gute an diesem Unglück ist, dass die Aufgabe, die mir mein Chef dieses Mal zugewiesen hat, genau die Front-End-Entwicklungsaufgabe ist, für die ich mich schon immer begeistert habe. Zuvor war ich an der Entwicklung von Backend-Verwaltungsprogrammen für die Website des Unternehmens beteiligt und habe dabei hauptsächlich die Geschäftslogik auf der Serverseite verarbeitet. Ich hatte nie die Gelegenheit gehabt, meine Fähigkeiten in der Front-End-Entwicklung unter Beweis zu stellen, für die ich mich leidenschaftlich interessiere. Übung ist der beste Weg, um wahres Wissen zu testen, und das Lösen der mir zugewiesenen praktischen Aufgaben ist eine seltene Prüfung. Ich habe viel verstreutes Wissen durch Bücher und verschiedene Materialien gelernt, aber ich hatte nicht die Gelegenheit, es für einen „umfassenden Test“ zusammenzufassen, haha. Oben stehen so viele Worte, das liegt alles daran, dass sie zu lange unterdrückt wurden, haha.

Lassen Sie mich zunächst die Aufgabenanforderungen beschreiben: Auf der Homepage der Website des Unternehmens befindet sich ein JPG-Bild mit fünf Bällen. Seine Funktion besteht darin, zu navigieren. Wenn Sie auf den Text auf jedem Ball klicken, wird die sekundäre Seite mit den entsprechenden Informationen geöffnet. Zu dem Bild gibt es eine fast identische Flash-Version. Zu den Aufgaben, die mir mein Chef zugewiesen hat, gehört es, die Flash-Version der Navigation anzuzeigen, wenn im Client-Browser ein Flash-Dateiplayer installiert ist, andernfalls die JPG-Bildnavigation anzuzeigen. Nachdem ich die Aufgabe erhalten hatte, dachte ich einen Moment darüber nach. Da es sich um Frontend-Entwicklung handelt, muss ich natürlich die Browserkompatibilität berücksichtigen. Die beste Möglichkeit, die Lücke zwischen den Browsern zu überbrücken, besteht darin, ein oder mehrere ausgereifte JavaScript-Frameworks zu verwenden. Glücklicherweise gibt es ein sehr ausgereiftes und hochentwickeltes JS-Framework namens SWFObject.js.

Das erste Mal, dass ich mit SWFObject.js in Kontakt kam, war V1.5, und dieses Mal habe ich V2.1 verwendet, um das Problem zu lösen. Es gibt immer noch einige Unterschiede bei der Verwendung der beiden. Insgesamt bin ich der Meinung, dass V2.1 im Vergleich zu V1.5 einen großen Sprung nach vorne darstellt. V2.1 entspricht sowohl hinsichtlich des Quellcodes des Frameworks als auch des Nutzungsprozesses eher dem objektorientierten JavaScript-Programmierstil.

Ich werde Sie auf diese „harte“ Reise aus der Perspektive eines Lernenden mitnehmen, der gerade JavaScript erkundet hat. Egal, ob Sie ein Anfänger wie ich oder ein Veteran sind, der bereits gekonnt verschiedene JS-Codes schreiben kann, ich hoffe, Sie werden nachsichtig sein und mich auf zivilisierte Weise auf die Kurzsichtigkeit in meinem Denken und die Fehler in meinem Schreiben hinweisen.

Der folgende Code ist ein Anwendungsbeispiel, das ich aus einem Beschreibungsdokument von SWFObject V1.5 adaptiert habe (klicken Sie auf diesen Link, wenn Sie mehr über V1.5 erfahren möchten):

Code kopieren
Der Code lautet wie folgt:

<html>
<Titel>DEMO</Titel>
<Kopf>
<script type="text/javascript" src="swfobject_source.js"></script>
<Skripttyp="text/javascript">
var so = neues SWFObject("http://www.pec365.com/Flash/20071113.swf", "meinFilm", "304", "367", "7", "#FFFFFF");
so.write("Flashinhalt");
</Skript>
</Kopf>
<Text>
<Formular-ID="Formular1">
<div id="Flashinhalt">
<a href="http://www.adobe.com/go/getflashplayer">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Adobe Flash Player herunterladen" border="0" />
</a>
</div>
</form>
</body>
</html>

Wenn Sie die Bedeutung jedes Parameters in SWFObject() kurz verstehen möchten, lesen Sie bitte die Dokumentation. Ich werde sie hier nicht wiederholen.
Ich empfehle dringend, den Code im „V1.5-Verwendungsbeispiel“ in Notepad zu kopieren und auf SWFObject V1.5 zu klicken, um die erforderliche Quelldatei des V1.5-Frameworks herunterzuladen. Suchen Sie nach der Dekomprimierung die Datei swfobject_source.js (unkomprimierte Version, der Dateiname der komprimierten Version lautet swfobject.js), benennen Sie die Notepad-Datei in demo.html um und legen Sie sie im selben Ordner wie die Datei swfobject_source.js ab. Führen Sie sie dann in einem beliebigen Browser wie IE6/IE7, Fox, Opera, Safari, Navigator, Chrome usw. aus, um die Ergebnisse anzuzeigen.
Wenn Sie meinem Rat gefolgt sind, sollten Sie dieses Bild auf der Seite sehen. , und nicht eine Flash-Datei, warum? Wenn Sie die Internet Explorer-Reihe auf Ihrem PC installiert haben, befolgen Sie bitte die nachstehenden Schritte: Klicken Sie auf das IE-Browsersymbol, suchen Sie in der Symbolleiste das Menü „Extras“, wählen Sie „Internetoptionen“, klicken Sie im sich öffnenden Fenster auf „Erweitert“, suchen Sie die Option „Skriptdebugging deaktivieren (Internet Explorer)“, entfernen Sie das Häkchen aus dem Kontrollkästchen davor und klicken Sie auf „OK“. Durchsuchen Sie nach Abschluss der obigen Vorgänge die Seite demo.html erneut. Sie werden feststellen, dass ein Fehleraufforderungsfeld mit der folgenden Fehlermeldung angezeigt wird: „Ein Laufzeitfehler ist aufgetreten. Müssen Sie debuggen? Zeile: 117 Fehler: ‚null‘ ist leer oder kein Objekt.“

Wenn Sie zufällig eine IDE der VS 2003/2005/2008-Reihe für die Entwicklung verwenden, müssen Sie meiner Meinung nach nicht lernen, wie Sie JavaScript-Code debuggen. Sie können einen Debugger über var so = ... setzen und dann debuggen und verfolgen. Drücken Sie weiterhin F11, bis Sie über die Methode so.write() in die Datei swfobject_source.js gelangen. Sie werden feststellen, dass der tatsächliche Parameter „flashcontent“, der an so.write(elementId) übergeben wird, immer null ist, wenn document.getElementById("flashcontent") verwendet wird. Warum ist das so? Haben Sie das Problem gefunden?

Haha, wenn Sie noch ein Anfänger sind, der nicht viel über JavaScript weiß, werden Sie genauso verwirrt sein wie ich damals. Nach vielen Debugging- und Code-Änderungen bin ich fest davon überzeugt, dass der von mir geschriebene JS-Code keinen Fehler enthält. Könnte es sein, dass es ein Problem mit der extern geladenen Datei swfobject_source.js gibt? Wenn es ein Problem gibt, was ist dann das Problem? Ich habe damals versucht, eine Lösung für den Fehler zu finden. Ich habe den obigen Code in das folgende Beispiel geändert:

Code kopieren
Der Code lautet wie folgt:

<html>
<Titel>DEMO</Titel>
<Kopf>
<Skripttyp="text/javascript">
// Das Ausführen einer anonymen Funktion unterscheidet sich nicht vom Ausführen einer normalen Funktion
(Funktion() {
var flash = document.getElementById("flashcontent");
var msg = null;
fenster.onload = funktion() {
wenn (blinken) {
msg = „Das Element existiert.“;
flash.innerHTML = Nachricht;
} anders {
msg = „Das Element existiert nicht“;
Fenster.Alarm(Nachricht);
}
};
})();
</Skript>
</Kopf>
<Text>
<Formular-ID="Formular1">
<div id="Flashinhalt">
<a href="http://www.adobe.com/go/getflashplayer">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" _fcksavedurl=""http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif"" alt="Adobe Flash Player herunterladen" border="0" />
</a>
</div>
</form>
</body>
</html>

Wenn Sie den obigen Code ausführen, werden Sie feststellen, dass das Bild immer noch auf der Seite angezeigt wird. , und es erscheint ein Warnfenster mit der Meldung „Das Element existiert nicht“. Es scheint, dass das Problem nicht von der extern geladenen Datei swfobject_source.js herrührt.

Wenn Sie dies lesen, werden Sie definitiv meine damalige Frustration erleben. Nach einer kurzen Pause habe ich meinen Kopf frei gemacht und zurückgeblickt und festgestellt, dass das Wesentliche des Problems im „Laden des HTML-DOM“ liegt. Auf einer Seite werden die JS-Skripte im Seitenkopf (zwischen <head></head>) und die aus externen Dateien geladenen JS-Dateien ausgeführt, bevor das HTML-DOM tatsächlich erstellt wird. Daher können an diesen beiden Stellen ausgeführte Skripte nicht auf den DOM zugreifen, der noch nicht existiert. Sie sollten den wahren Grund kennen. Während der Ausführung des JS-Codes in Beispiel 1.1 wurde auf <div id="flashcontent">……</div> zugegriffen, bevor es erstellt wurde.

Nun, es gibt noch einen letzten Schritt, den Sie selbst ausführen müssen. Dabei müssen Sie einfach den obigen Code ändern und eine unelegante Methode verwenden, um das Problem des „HTML-DOM-Ladens“ zu lösen. Welche Methode ist das? Ich denke, Sie haben es vielleicht schon erraten. Ja, es ist die folgende Methode:

Code kopieren
Der Code lautet wie folgt:

<html>
<Titel>DEMO</Titel>
<Kopf>
<script type="text/javascript" src="swfobject_source.js"></script> _fcksavedurl=""swfobject_source.js"></script>"
</Kopf>
<Text>
<Formular-ID="Formular1">
<div id="Flashinhalt">
<a href="http://www.adobe.com/go/getflashplayer">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Adobe Flash Player herunterladen" border="0" />
</a>
</div>
</form>
<Skripttyp="text/javascript">
var so = neues SWFObject("http://www.pec365.com/Flash/20071113.swf", "meinFilm", "304", "367", "7", "#FFFFFF");
so.write("Flashinhalt");
</Skript>
</body>
</html>

Die Tausenden von Wörtern oben beschreiben nur, wie viele Umwege ich gemacht habe, auf welche Schwierigkeiten ich beim Lösen von Problemen gestoßen bin, wie ich aus den Schwierigkeiten herausgekommen bin, das erlernte Wissen genutzt und wieder gelernt habe. Obwohl es ein bisschen umständlich ist, haben Sie etwas wie ich gewonnen?

<<:  Implementierung der CSS-Rahmenlängensteuerungsfunktion

>>:  React Router 5.1.0 verwendet useHistory, um die Seitensprungnavigation zu implementieren

Artikel empfehlen

Webdesign-Tipps: Einfache Regeln für das Seitenlayout

Wiederholung: Wiederholen Sie bestimmte Seitendes...

So verwenden Sie die Vue3-Komponente zum asynchronen Laden von Daten Suspense

Inhaltsverzeichnis Vorwort Komponenten erstellen ...

Installieren Sie Mininet aus dem Quellcode auf Ubuntu 16.04

Mininet Mininet ist eine leichtgewichtige, softwa...

Detailliertes Tutorial zur Installation von CUDA9.0 auf Ubuntu16.04

Vorwort: Dieser Artikel basiert auf den Erfahrung...

Eine kurze Einführung in die Kernkenntnisse der VUE uni-app

Inhaltsverzeichnis Spezifikation a. Die Auslageru...

So erhalten Sie USB-Scannerdaten mit js

In diesem Artikel wird der spezifische Prozess zu...

Das Implementierungsprinzip der MySQL-Master-Slave-Synchronisation

1. Was ist MySQL Master-Slave-Synchronisierung? W...

DOCTYPE-Element ausführliche Erklärung vollständige Version

1. Übersicht In diesem Artikel wird das DOCTYPE-E...

So implementieren Sie https mit Nginx und OpenSSL

Wenn die Serverdaten nicht verschlüsselt und mit ...

Natives JavaScript zur Implementierung einer zufälligen Namensaufruftabelle

In diesem Artikelbeispiel wird der spezifische Co...

js verwendet FileReader zum Lesen lokaler Dateien oder Blobs

Inhaltsverzeichnis FileReader liest lokale Dateie...

MySQL-Grundlagen - Kurzanleitung - Wissenszusammenfassung (mit Mindmap)

Inhaltsverzeichnis Vorwort 1. Grundkenntnisse der...