Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erläuterung von Beispielen für das Einbetten von Videos in HTML-Seiten und das Umschalten von Videos unter JS-Steuerung

Detaillierte Erläuterung von Beispielen für das Einbetten von Videos in HTML-Seiten und das Umschalten von Videos unter JS-Steuerung

高洛峰
高洛峰Original
2017-03-06 16:57:592303Durchsuche

In diesem Artikel wird ausführlich beschrieben, wie Sie Videos in HTML-Seiten einbetten und wie Sie JS zum Steuern des Videowechsels verwenden. Nachfolgend finden Sie weitere Informationen. Erstens lautet der HTML-Code zum Einbetten eines Videos in die Seite:

Der Code lautet wie folgt:

<p id="youku" class="youku"> 
<object id="obx" name="obx" width="290" height="260"> 
<param name="movie" value="http://www.tudou.com/v/6HJvxxkarzk/&resourceId=0_04_11_19/v.swf"></param> 
<param name="allowFullScreen" value="true"></param> 
<param name="allowscriptaccess" value="always"></param> 
<param name="wmode" value="opaque"></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> 
</object> 
</p>


Dazu gehören die Objekt- und Einbettungs-Tags Wird gleichzeitig verwendet, um mit mehreren Browsern kompatibel zu sein. Achten Sie jedoch darauf, dass die gleichen Attributwerte unter beiden Tags konsistent bleiben.
PS: Eine Einführung und Verwendung der Tags 273238ce9338fbb04bee6997e5552b95 und ihrer Attribute finden Sie im Artikel OBJECT- und EMBED-Tags.

Dann sprechen wir darüber, wie man JS verwendet, um die Adresse des eingebetteten Videos dynamisch zu ändern, um das nächste Video abzuspielen.
Zu diesem Zeitpunkt können viele Menschen sofort daran denken, Tag-Namen oder DOM-Methoden zu verwenden, um das Wertattribut des Param-Knotens und das SRC-Attribut des Einbettungsknotens zu finden, und die dynamische JS-Zuweisung zum Ändern der Adresse zu verwenden. Allerdings stellte der Test fest, dass die Videoadresse zwar ersetzt wurde, das auf der Seite angezeigte Video jedoch unverändert blieb, was rätselhaft war.

Es stellt sich heraus, dass alle Parameter des eingebetteten Objekts beim Laden der Seite initialisiert werden. Nur durch erneutes Laden kann der Wechsel zum nächsten Video durchgeführt werden. Eine einfache Änderung des Adressattributwerts ist nicht möglich . Genau wie bei einem Mitarbeiter des Unternehmens hat sich seine Adresse geändert (umgezogen), er ist immer noch der ursprüngliche Mitarbeiter und nicht jemand anderes.
Es gibt zwei Methoden, die ich oft verwende, um es neu zu laden (nehmen Sie den obigen Code als Beispiel):
① Verwenden Sie die obj.innerHTML-Methode von JS, um das gesamte Objektobjekt zurückzusetzen.

Der Code lautet wie folgt:

/*功能:动态切换视频*/ 
function setvideo(url){ 
var youku = document.getElementById("youku"); 
var htmlstr = "<object id=&#39;obx&#39; name=&#39;obx&#39; width=&#39;290&#39; height=&#39;260&#39;>"; 
htmlstr += "<param name=&#39;movie&#39; value=&#39;"+url+"&#39;></param>"; 
htmlstr += "<param name=&#39;allowFullScreen&#39; value=&#39;true&#39;></param>"; 
htmlstr += "<param name=&#39;allowscriptaccess&#39; value=&#39;always&#39;></param>"; 
htmlstr += "<param name=&#39;wmode&#39; value=&#39;opaque&#39;></param>"; 
htmlstr += "<embed src=&#39;"+url+"&#39; type=&#39;application/x-shockwave-flash&#39; allowscriptaccess=&#39;always&#39; allowfullscreen=&#39;true&#39; wmode=&#39;opaque&#39; width=&#39;290&#39; height=&#39;260&#39;></embed>"; 
htmlstr += "</object>"; 
youku.innerHTML = htmlstr; 
}


②Platzieren Sie einen Iframe im p-Container, damit die Seite im Iframe dynamisch aktualisiert werden kann, ohne den aktuellen Stand zu beeinträchtigen übergeordnete Seite.
Ich werde den spezifischen Code nicht schreiben. Die allgemeine Idee ist:
 1. Verwenden Sie die URL, um den Wert zu übergeben.
2. Die übergeordnete oder untergeordnete Seite erstellt eine versteckte Domäne, um die Adresse dynamisch zu speichern, damit die untergeordnete Seite sie erhalten kann.
 3. Verwenden Sie die Methode ①, um das Objektobjekt auf der Unterseite zurückzusetzen.
4. Andere Methoden wie window.open sind weit entfernt und werden nicht empfohlen.
Zu diesem Zeitpunkt wurden die Einbettung und Steuerung der Videoumschaltung erfolgreich implementiert. Aber versehentlich habe ich ein Problem entdeckt:
Wenn Sie nach dem Wechsel zu einem neuen Video auf „Aktualisieren“ klicken oder F5 drücken, um die Seite zu aktualisieren, wird ein Skriptfehler „fehlendes Objekt“ angezeigt. Ich habe den Fehlercode gefunden und festgestellt, dass es sich um einen internen Skriptfehler in Flash handelt:

function __flash__removeCallback(instance, name) {
instance[name] = null
}

Wenn auf der Seite Flash installiert ist und die flash.external.ExternalInterface.addCallback-Methode in Flash verwendet wird, wird beim Aktualisieren der Webseite ein js-Fehler von __flash__removeCallback gemeldet: fehlendes Objekt (Zeile 53), (Jscript-). Skriptblock). Der Aufrufort dieser Funktion ist:

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

Offensichtlich gibt document.getElementById("") hier null zurück __flash__removeCallback, um einen Fehler zu melden. Ich persönlich denke, dass die integrierte Methode von Flash wahrscheinlich so geschrieben werden sollte:

function __flash__removeCallback(instance, name) {
if (instance != null) { Instanz [name] = null ; }
}

Jemand hat getestet und festgestellt, dass document.getElementById("") hier das id/name-Attribut des Flash-Steuerungsobjekts abruft Da die ID nicht für das Attribut „Objekt/Name“ festgelegt ist, treten nach dem Festlegen keine Fehler auf. Aber tatsächlich haben alle meine Objekte ID-/Namensattribute, daher bin ich mit diesem Grund nicht einverstanden. Unter diesem Gesichtspunkt kann diese Methode zum Hinzufügen von ID/Namen die Probleme einiger Leute lösen, und dies ist nicht die einzige Ursache für dieses Problem.

Danach habe ich lange gesucht und schließlich auf einer ausländischen Website eine Lösung gefunden, die von einer Person namens Dave Smith geschrieben wurde. Ich habe einige Verbesserungen vorgenommen, um den Druck zu verringern auf der Seite, um kontinuierlich Code auszuführen. Der von ihm bereitgestellte Code lautet wie folgt:

Der Code lautet wie folgt:

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


Was er meint, ist ungefähr: Das Umschreiben dieses Skripts in Flash kann das Problem lösen Problem, aber irgendwann nach dem Laden des Objektobjekts überschreibt das Skript in Flash die Funktion, die Sie neu geschrieben haben. Daher gibt es keine Garantie dafür, dass der Player die von Ihnen neu geschriebene Funktion zu gegebener Zeit aufruft. Um dieses Ziel zu erreichen, stellte er die Funktion so ein, dass sie alle 10 Millisekunden die im Flash bereitgestellte Funktion überschreibt. Dieses Problem ist gelöst. Gleichzeitig vereinfachte er diesen Code, um die folgenden zwei „Versionen“ zu bilden:
Vereinfachte Version eins: etwas einfacher

Der Code lautet wie folgt:

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


Vereinfachte Version zwei: super einfach

Der Code lautet wie folgt:

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


Ich habe eine Weile darüber nachgedacht und es rationalisiert :
Dieser Fehler wird aktualisiert. Die Seite wird generiert und der Vorgang der Seitenaktualisierung ist der Tod der alten Seite und das Neuladen der neuen Seite. Theoretisch wird es kein Problem geben, die neue Seite neu zu laden, daher tritt der Fehler in der „Nachsorge“-Arbeit auf, bevor die alte Seite stirbt. Ich kann den gleichen Zweck erreichen, solange ich die Rückruffunktion im Flash neu schreibe, bevor die Seite stirbt. Der Code lautet wie folgt und der Test besteht.

Der Code lautet wie folgt:

/*解决视频切换内部脚本错误*/ 
<script type="text/javascript"> 
function endcall(){var s=function(){__flash__removeCallback=function(i,n){if(i)i[n]=null;};window.setTimeout(s,10);};s();} 
window.onbeforeunload = endcall; 
</script>

Für detailliertere Beispiele für die Videoeinbettung in HTML-Seiten und JS-Steuerungswechselvideos achten Sie bitte auf PHP-Chinesisch Website für verwandte Artikel!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn