@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. Я удалил атрибут name и добавил атрибут ID, поскольку это обычная практика при использовании JavaScript для поиска элемента (в данном случае document.querySelector
). См. Примеры в https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications
Когда вы используете ввод файла, значение ввода представляет собой массив файлов, и каждый элемент массива на самом деле представляет собой объект, содержащий сведения о файле, включая имя и файл дорожка. Поскольку вы ожидаете только одного файла во входном файле, вам нужно захватить первый элемент массива (files.file[0]
), который затем можно использовать для доступа к имени файла (files.file[0].name
).
Flash настолько мертв ... почти не поддерживается, и поддержка, что есть, быстро падает ... любая причина, по которой вы используете его вместо html5 api's? – Tschallacka
@Tschallacka для флеш игры –