2017-02-23 6 views
2

Я смотрел повсюду и здесь в полной мере степень того, что я нашел:Как сделать HTML или Javascript открытым и отображать .swf файлы из файловой системы на кнопку мыши

<!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, поэтому его можно скачать для использования в автономном режиме

+0

Flash настолько мертв ... почти не поддерживается, и поддержка, что есть, быстро падает ... любая причина, по которой вы используете его вместо html5 api's? – Tschallacka

+1

@Tschallacka для флеш игры –

ответ

1

@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> 

Основные проблемы, связанные с вашим кодом:

  1. Вы все расставили внутри <object> элемента. Не только это неверно, элемент <object> не нужен вообще - это не работает SWFObject. Я удалил <object> и связанные с ним <param> узлы.

  2. Атрибут «accept» для ввода должен указывать тип MIME, а не расширение файла. Я изменил его на application/x-shockwave-flash.

  3. Вход «PickedFile» имеет имя, но не ID. Я удалил атрибут name и добавил атрибут ID, поскольку это обычная практика при использовании JavaScript для поиска элемента (в данном случае document.querySelector). См. Примеры в https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications

  4. Когда вы используете ввод файла, значение ввода представляет собой массив файлов, и каждый элемент массива на самом деле представляет собой объект, содержащий сведения о файле, включая имя и файл дорожка. Поскольку вы ожидаете только одного файла во входном файле, вам нужно захватить первый элемент массива (files.file[0]), который затем можно использовать для доступа к имени файла (files.file[0].name).

Смежные вопросы