要判断 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,300
和 200
分别是容器的宽度和高度,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技术站