我如何使 html 或 javascript 在单击按钮时打开并显示文件系统中的 .swf 文件
How do I make html or javascript open and display .swf files from the file system on a button click
我找遍了所有地方,这里是我发现的全部内容:
<!DOCTYPE html>
<html>
<body>
<input name="PickedFile" type="file" accept=".swf">
<object width="550" height="400">
<param name="movie" value="PickedFile">
<script type="text/javascript" src="/path/to/swfobject.js"></script>
<script type="text/javascript">
function loadSWF(url) {
swfobject.embedSWF(url, "flashcontent", "550", "400", "7");
}
</script>
<p><a href="PickedFile" onclick="loadSWF(PickedFile); return false;">
Click here to load the SWF!
</a></p>
<div id="flashcontent"></div>
</object>
</body>
</html>
我希望它在 html 中,以便可以下载供离线使用
@AHBagheri,您可以显示从服务器外部加载的 SWF,我刚刚使用 Chrome 进行了验证。我很惊讶它起作用了。
@Ben,您的代码中存在多个缺陷。您的代码无法正常工作的原因有很多; SWFObject tutorial you based your SWF loading code on(来自 LearnSWFObject)在编写时并未考虑文件输入。
这是我在 Chrome (macOS) 中验证过的更新代码。请务必将 SWFObject <script>
指向您的 SWFObject 副本。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Local SWF Test</title>
</head>
<body>
<div>
<input id="PickedFile" type="file" accept="application/x-shockwave-flash"/><br/>
<button id="btn_load">Load the SWF!</button>
</div>
<div id="flashcontent"></div>
<script src="swfobject.js"></script>
<script>
var loadSWF = function (){
var file = document.querySelector("#PickedFile");
if(file && file.files[0]){
swfobject.embedSWF(file.files[0].name, "flashcontent", "550", "400", "7");
} else {
alert("You need to pick a file first.");
}
};
document.querySelector("#btn_load").addEventListener("click", loadSWF);
</script>
</body>
</html>
您的代码的主要问题:
您将所有内容都放在 <object>
元素中。这不仅不正确,而且根本不需要 <object>
元素——这不是 SWFObject 的工作方式。我删除了 <object>
和相关的 <param>
节点。
输入的"accept"属性需要指定MIME类型,而不是文件扩展名。我改成了application/x-shockwave-flash
.
"PickedFile" 输入有名称但没有 ID。我删除了名称属性并添加了 ID 属性,因为这是使用 JavaScript 查找元素(在本例中为 document.querySelector
)时的常见做法。请参阅 https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications
中的示例
当您使用文件输入时,输入的值是一个文件数组,数组中的每一项实际上是一个包含文件详细信息的对象,包括名称和文件小路。由于您只希望文件输入中有一个文件,因此您需要获取第一个数组项 (files.file[0]
),然后您可以使用它来访问文件名 (files.file[0].name
).
我找遍了所有地方,这里是我发现的全部内容:
<!DOCTYPE html>
<html>
<body>
<input name="PickedFile" type="file" accept=".swf">
<object width="550" height="400">
<param name="movie" value="PickedFile">
<script type="text/javascript" src="/path/to/swfobject.js"></script>
<script type="text/javascript">
function loadSWF(url) {
swfobject.embedSWF(url, "flashcontent", "550", "400", "7");
}
</script>
<p><a href="PickedFile" onclick="loadSWF(PickedFile); return false;">
Click here to load the SWF!
</a></p>
<div id="flashcontent"></div>
</object>
</body>
</html>
我希望它在 html 中,以便可以下载供离线使用
@AHBagheri,您可以显示从服务器外部加载的 SWF,我刚刚使用 Chrome 进行了验证。我很惊讶它起作用了。
@Ben,您的代码中存在多个缺陷。您的代码无法正常工作的原因有很多; SWFObject tutorial you based your SWF loading code on(来自 LearnSWFObject)在编写时并未考虑文件输入。
这是我在 Chrome (macOS) 中验证过的更新代码。请务必将 SWFObject <script>
指向您的 SWFObject 副本。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Local SWF Test</title>
</head>
<body>
<div>
<input id="PickedFile" type="file" accept="application/x-shockwave-flash"/><br/>
<button id="btn_load">Load the SWF!</button>
</div>
<div id="flashcontent"></div>
<script src="swfobject.js"></script>
<script>
var loadSWF = function (){
var file = document.querySelector("#PickedFile");
if(file && file.files[0]){
swfobject.embedSWF(file.files[0].name, "flashcontent", "550", "400", "7");
} else {
alert("You need to pick a file first.");
}
};
document.querySelector("#btn_load").addEventListener("click", loadSWF);
</script>
</body>
</html>
您的代码的主要问题:
您将所有内容都放在
<object>
元素中。这不仅不正确,而且根本不需要<object>
元素——这不是 SWFObject 的工作方式。我删除了<object>
和相关的<param>
节点。输入的"accept"属性需要指定MIME类型,而不是文件扩展名。我改成了
application/x-shockwave-flash
."PickedFile" 输入有名称但没有 ID。我删除了名称属性并添加了 ID 属性,因为这是使用 JavaScript 查找元素(在本例中为
document.querySelector
)时的常见做法。请参阅 https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications 中的示例
当您使用文件输入时,输入的值是一个文件数组,数组中的每一项实际上是一个包含文件详细信息的对象,包括名称和文件小路。由于您只希望文件输入中有一个文件,因此您需要获取第一个数组项 (
files.file[0]
),然后您可以使用它来访问文件名 (files.file[0].name
).