Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Отображение SWF с помощью File API (https://javascript.ru/forum/dom-window/34475-otobrazhenie-swf-s-pomoshhyu-file-api.html)

kuzya_vl 06.01.2013 15:06

Отображение SWF с помощью File API
 
Как отобразить flash-ролик динамически с помощью FileAPI (FileReader).
Как отобразить JPEG нашел,
var reader = new FileReader();
reader.onload = (function(theFile) {
	return function(e) {
		var div = document.getElementById('image');
		div.innerHTML = ['<img class="thumb" src="', e.target.result,'" title="', theFile.name, '"/>'].join('');
	}
})(f);
reader.readAsDataURL(f);

а как быть с swf не соображу!
Помогите.

danik.js 07.01.2013 08:15

Дык также, только вместо img - object (или embed):
<object type="application/x-shockwave-flash" data="flash.swf" width="750" height="400">
	<param name="movie" value="flash.swf" />
</object>

kuzya_vl 08.01.2013 11:34

Извените, не прокатит.
data='flash.swf' не получится!
Мне надо как-то так:
div.innerHTML = '<object type="application/x-shockwave-flash" data="' + e.target.result + '" width="750" height="400"><param name="movie" value="' + e.target.result + '" />';

dmitriymar 08.01.2013 12:59

Цитата:

Сообщение от danik.js
div.innerHTML = '<object type="application/x-shockwave-flash" data="' + e.target.result + '" width="750" height="400"><param name="movie" value="' + e.target.result + '" />';

ну и в чём вопрос? -именно так и есть.
Цитата:

Сообщение от danik.js
Дык также, только вместо img - object (или embed):
<object type="application/x-shockwave-flash" data="flash.swf" width="750" height="400">
<param name="movie" value="flash.swf" />
</object>

после загрузки нельзя поменять параметры флешу так.

kuzya_vl 08.01.2013 13:57

Полный код страницы:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>File API Test</title>
    <style>
        .thumb {
            height: 75px;
            border: 1px solid #000;
            margin: 10px 5px 0 0;
        }
    </style>
    <script>
        function changeImage(el)
        {
            var f = el.files[0];
            if (f.type.match('image.*') != null)
                showPicture(f);
            else if (f.type.match('flash') != null)
                showFlash(f);
            else
                return;
        }
        function showFlash(f)
        {
            var reader = new FileReader();
            reader.onload = (function(theFile) {
                return function(e) {
                    var div = document.getElementById('image');
                    div.innerHTML = '<object class="thumb" type="application/x-shockwave-flash" data="' +
                            (e.target.result) +'"><param name="movie" value="'+ (e.target.result) +'" />';
                }
            })(f);
            reader.readAsDataURL(f);
        }
        function showPicture(f)
        {
            var reader = new FileReader();
            reader.onload = (function(theFile) {
                return function(e) {
                    var div = document.getElementById('image');
                    div.innerHTML = ['<img class="thumb" src="', e.target.result,'" title="', theFile.name, '"/>'].join('');
                }
            })(f);
            reader.readAsDataURL(f);
        }
    </script>
</head>

<body>
<input type="file" id="load" name="load"/> <br />
<div id="image"></div>

<script>
    if (window.File && window.FileReader && window.FileList && window.Blob) {
        document.getElementById('load').onchange = function() { changeImage(document.getElementById('load')); }
    }
    else {
        alert('The File APIs are not fully supported in this browser.');
    }
</script>
</body>
</html>

Я так полагаю, что в строке:
div.innerHTML = '<object class="thumb" type="application/x-shockwave-flash" data="' + (e.target.result) +'"><param name="movie" value="'+ (e.target.result) +'" />';
как-то правильно надо задать параметр data и value.
А вот как задать?

kuzya_vl 08.01.2013 14:38

Нашел очень простое решение !!!
div.innerHTML = '<object class="thumb" type="application/x-shockwave-flash" [B]src="'+theFile.name+'[/B]"><param name="movie" value="'+[B]theFile.name[/B]+'" />';

danik.js 08.01.2013 22:18

Нет у object атрибута src.
Есть data. Но этот атрибут не понимают ишаки 7-8. Поэтому для них нужен param[name="movie"], хотя его также понимают все браузеры кроме Firefox (только что тестил в IE7-9, Opera, Safari, Firefox, Chrome)
И закрой тег object, во избежание возможных проблем.


Часовой пояс GMT +3, время: 09:21.