js怎么判断flash swf文件是否加载完毕

要判断 Flash 或 SWF 文件是否加载完毕,可以结合 JavaScript 和 SWFObject 插件实现。下面是详细的攻略:

步骤一:引入 SWFObject

首先需要在 HTML 页面中引入 SWFObject 插件,可以通过以下代码引入:

<script src="https://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>

步骤二:定义 Flash 容器

然后需要定义一个容器来显示 Flash 文件,以便在页面上加载 SWF 文件。可以使用以下 HTML 代码来创建容器:

<div id="myFlashContent">
  <p>It appears you don't have Adobe Flash Player installed. <a href="http://get.adobe.com/flashplayer">Click here to download it</a>.</p>
</div>

在这个代码中,myFlashContent 是容器的 ID,可以修改为其他名字。p 标签里的内容是在 Flash 没有加载的情况下显示的替代内容。

步骤三:加载 Flash 文件

接着,使用 swfobject.embedSWF() 方法来加载 Flash 文件。可以使用以下代码加载一个 Flash 文件:

swfobject.embedSWF("myFlash.swf", "myFlashContent", "300", "200", "10.0.0");

在这个代码中,myFlash.swf 是 Flash 文件的 URL,myFlashContent 是容器的 ID,300200 分别是容器的宽度和高度,10.0.0 是 Flash Player 的最低版本要求。

步骤四:添加加载侦听器

最后,使用 swfobject.getObjectById() 方法获取 Flash 对象,然后为其添加加载侦听器来判断 Flash 文件是否加载完毕。可以使用以下代码添加加载侦听器:

var flash = swfobject.getObjectById("myFlashContent");

if (flash) {
  if (flash.addEventListener) {
    flash.addEventListener("load", function() {
      console.log("Flash is loaded.");
    }, false);
  } else if (flash.attachEvent) {
    flash.attachEvent("onload", function() {
      console.log("Flash is loaded.");
    });
  }
}

在这个代码中,首先通过 swfobject.getObjectById() 方法获取 Flash 对象,然后判断 Flash 是否存在。如果存在,就添加 load 事件侦听器。侦听器可以使用 console.log() 来输出 Flash 是否加载完毕。

示例一:判断单个 Flash 文件加载

下面是一个完整的示例,用于判断单个 Flash 文件是否加载完毕:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Flash Loading Test</title>
  <script src="https://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>
  <script>
    function onFlashLoaded() {
      console.log("Flash is loaded.");
    }

    window.onload = function() {
      var flashContent = document.getElementById("myFlashContent");

      swfobject.embedSWF("myFlash.swf", "myFlashContent", "300", "200", "10.0.0");

      if (flashContent) {
        var flash = swfobject.getObjectById("myFlashContent");

        if (flash) {
          if (flash.addEventListener) {
            flash.addEventListener("load", onFlashLoaded, false);
          } else if (flash.attachEvent) {
            flash.attachEvent("onload", onFlashLoaded);
          }
        }
      }
    }
  </script>
</head>
<body>
  <div id="myFlashContent">
    <p>It appears you don't have Adobe Flash Player installed. <a href="http://get.adobe.com/flashplayer">Click here to download it</a>.</p>
  </div>
</body>
</html>

在这个示例中, HTML 页面中定义了一个容器 myFlashContent,然后在 JavaScript 中使用 swfobject.embedSWF() 方法加载一个 Flash 文件。接着,使用 swfobject.getObjectById() 方法获取 Flash 对象,并添加 load 事件侦听器,输出加载完成信息。

示例二:判断多个 Flash 文件加载

如果需要判断多个 Flash 文件是否加载完毕,可以使用 Promise 来实现。下面是一个完整的示例,用于判断多个 Flash 文件是否加载完毕:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Flash Loading Test</title>
  <script src="https://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>
  <script>
    function onFlashLoaded({ id }) {
      console.log(`Flash ${id} is loaded.`);
    }

    function loadFlash(url, id) {
      return new Promise((resolve, reject) => {
        const container = document.createElement("div");
        container.id = id;
        document.body.appendChild(container);

        swfobject.embedSWF(url, id, "300", "200", "10.0.0");

        const interval = setInterval(() => {
          const flash = document.getElementById(id);

          if (!flash || !flash.sendToActionScript) return;

          clearInterval(interval);

          flash.onload = () => {
            resolve({ id });
          };
        }, 100);
      });
    }

    window.onload = async function() {
      const flashUrls = [
        "myFlash1.swf",
        "myFlash2.swf",
        "myFlash3.swf",
      ];

      const flashPromises = flashUrls.map((flashUrl, index) => {
        const flashId = `flash_${index + 1}`;
        return loadFlash(flashUrl, flashId);
      });

      await Promise.all(flashPromises);

      console.log("All Flash files are loaded.");
    }
  </script>
</head>
<body>
</body>
</html>

在这个示例中,定义了一个 loadFlash() 函数,用于加载 Flash 文件并返回 Promise。新增一个 Promise 数组 flashPromises,为每个 Flash 地址调用 loadFlash() 函数,并且在 Promise 完成后输出加载完成信息。

这个示例中还实现了 Promise 超时控制,如果 Flash 文件加载超时则 Promise 被拒绝。

注意:这个示例使用了 async/await,浏览器版本需要在支持这些特性的范围内。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js怎么判断flash swf文件是否加载完毕 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • MyBatis中的resultMap简要概述

    关于MyBatis中的resultMap,我将为您进行详细的讲解。首先,我们需要明确的是,ResultMap是MyBatis中非常重要的一个概念,它负责将ResultSet中的数据映射到JAVA对象中。在MyBatis中,我们既可以使用基于注解的方式,也可以使用XML文件来定义ResultMap。接下来,我们将从以下几个方面进行讲解: ResultMap是什…

    Java 2023年6月1日
    00
  • Spring Security认证机制源码层探究

    Spring Security认证机制源码层探究 Spring Security是一个基于Spring框架的安全认证授权框架,它提供了一套完善的安全认证授权解决方案,提供了一系列的安全机制,例如用户名和密码认证、记住我、自动登录、动态权限控制、强制访问控制、会话管理等。 Spring Security认证机制基本原理 Spring Security的认证机制…

    Java 2023年5月20日
    00
  • Java实现RSA算法的方法详解

    下面是针对“Java实现RSA算法的方法详解”的完整攻略: 一、什么是RSA算法 RSA是一种非对称加密算法,常用于加密和数字签名。比对称加密算法更安全,但是加解密过程更耗时。RSA算法的基本思想是利用两个质数的乘积难以分解这个事实来实现加密。RSA算法的局限在于不能用于数据的加解密过程中,因为数据 > 小于密钥,如数据比密钥长且分段操作后解密时要占用…

    Java 2023年5月19日
    00
  • 深入了解Springboot核心知识点之数据访问配置

    深入了解Spring Boot核心知识点之数据访问配置 Spring Boot是一个非常流行的Java框架,它提供了许多便利的功能,其中包括数据访问。在本文中,我们将深入了解Spring Boot的数据访问配置,包括如何配置数据源、如何使用JdbcTemplate和如何使用Spring Data JPA。 配置数据源 在Spring Boot中,我们可以使用…

    Java 2023年5月15日
    00
  • SpringMVC 异常处理机制与自定义异常处理方式

    当使用 Spring MVC 开发应用时,异常处理是非常重要的一部分。由于操作系统错误、数据库错误等各种问题可能会导致应用程序出现异常,因此在应用程序中正确处理异常是重要的。本文将介绍 Spring MVC 中的异常处理机制及如何自定义异常处理方式。 SpringMVC 异常处理机制 Spring MVC 异常处理机制的核心是将异常抛到控制器的外部并处理。S…

    Java 2023年5月27日
    00
  • Java中PrintWriter使用方法介绍

    Java中PrintWriter使用方法介绍 PrintWriter是Java IO包中的一个类,提供了许多用于打印输出的方法。在Java中,我们通常使用System.out来进行输出,但是PrintWriter提供了更多的选择和定制化能力。 PrintWriter的构造方法 PrintWriter有很多构造方法,其中最常见的两种为: PrintWriter…

    Java 2023年5月20日
    00
  • Java基于redis和mysql实现简单的秒杀(附demo)

    下面是Java基于redis和mysql实现简单的秒杀的完整攻略。 1. 简介 本攻略为使用Java语言基于redis和mysql实现简单的秒杀过程,实现一个只有1个商品,10个用户,每个用户仅可购买1次的秒杀场景。 其中,redis用于作为缓存,避免多次查询数据库;mysql用于存储用户和商品信息,以及记录购买信息。在秒杀场景中,需要考虑并发访问和超卖的问…

    Java 2023年5月20日
    00
  • MyBatis-Plus updateById更新不了空字符串或null的解决方法

    针对“MyBatis-Plus updateById更新不了空字符串或null的解决方法”的问题,我们可以采取以下步骤解决: 1. 前置准备 首先,我们需要明确一下 MyBatis-Plus 的 updateById 方法的定义: int updateById(T entity); 可以看到它接受一个实体对象,然后根据实体对象中的非空属性对数据库表进行更新操…

    Java 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部