Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Проблема с доступом к Flash в IE


Автор: Elfet 3.11.2010, 21:14
Всем привет!
Может быть кто-нибудь знает в чём проблема может быть тут:
Код

$.get_movie = function(id) {
        var movie = null;
        if ($.browser.msie) {
            movie =  window[id];
        }
        else {
            movie = document[id];
        }
        return movie;
    };


Затем вызываю функцию movie.play(). 
Во всех браузерах кроме IE(Объект не поддерживает это свойство или метод) работает. 

Как заставить это работать и в IE?
Заранее спасибо!

Автор: Любитель 3.11.2010, 22:52
Как флешку вставляешь? Покажи разметку саму.

Автор: Elfet 3.11.2010, 23:07
Вот так вот:
Код

                var html = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"';
                html += ' codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" width="0" height="0"';
                html += ' id="' + settings.id + '"';
                html += ' align="middle">';
                html += '<param name="movie" value="' + settings.swf + '" />';
                html += '<param name="quality" value="' + settings.quality + '" />';
                html += '<param name="FlashVars" value="id=' + settings.id + '"/>';
                html += '<param name="allowScriptAccess" value="always"/>';
                html += '<embed src="' + settings.swf + '" FlashVars="id='+ settings.id +'"';
                html += ' allowScriptAccess="always" quality="' + settings.quality + '" bgcolor="#ffffff" width="0" height="0"';
                html += ' name="' + settings.id + '" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />';
                html += '</object>';


Автор: Любитель 3.11.2010, 23:23
Тогда document.getElementByID(id).play() вроде.

Автор: Elfet 4.11.2010, 12:36
Любитель, неа, всё так же не срабатывает :/

Автор: Любитель 5.11.2010, 12:30
Сорри, имелось ввиду: document.getElementById(id).Play()
Для совсем древних браузеров (раз уж embed пишешь) можно ещё document.embeds[name].

Автор: Elfet 5.11.2010, 22:51
Любитель, неа, пока что-то ни один вариант не подошёл. Возможно в чём-то в другом дело. Может я неправильно встроил флешку?

Автор: Любитель 6.11.2010, 00:53
Хм, а можешь дать линк на странчику или выложить? Непосредственно Play/Stop/etc. над дом-элементом object должны работать в любом нормальном браузере.

Автор: Elfet 6.11.2010, 12:04
Просто это целый плагин для звука под jQuery:

Автор: Любитель 6.11.2010, 16:38
Аа.. так речь про ExternalInterface? Я думал про управление флешкой самой (проигрывание, останов и т. д.).
Там всё гораздо хуже. У меня в своё время после часа экспериментов не удалось заставить в ие работать колбеки для динамически вставляемых (после загрузки DOM модели) флешек (решил задачу по-другому). Хотя, я думаю это решаемо, но вот, что там нужно (быть может и в AS коде) - точно не скажу.

Автор: Elfet 7.11.2010, 11:51
Короче разобрался smile 
Пришлось полностью переписать плагин. Теперь всё работает даже в IE(правда выдаёт какие-то ошибки он на непонятное место)

В для callback-ов из swf есть какой-то FABrige.js.

Добавлено через 59 секунд
А да забыл сказать как решил. С использованием swfobject.js

Автор: Любитель 7.11.2010, 12:28
Хм. Интересно просто что ему технически не хватает - почему сходу не работает? Сейчас вставляются флехи через DOM тож? Не document.write-ом вначале?

Автор: Elfet 7.11.2010, 14:11
Для встраивания флехи я вот этой библиотекой воспользовался: http://blog.deconcept.com/swfobject/ и всё стало работать, как там это работает не разбирался. Вот код:
Код

var isFlashLite = function()
    {
        if (!window.navigator || !window.navigator.mimeTypes) return false;
        var mimeType = window.navigator.mimeTypes["application/x-shockwave-flash"];
        if (!mimeType || !mimeType.enabledPlugin || !mimeType.enabledPlugin.filename) return false;
        return mimeType.enabledPlugin.filename.match(/flashlite/i) ? true : false;
    };

    var container = document.createElement("div");
    container.id = "sound_container_" + window.audio_count;
    // Hides Flash box. We cannot use display: none or visibility: hidden because it prevents
    // Flash from loading at least in IE. So we move it out of the screen at (-100, -100).
    // But this even doesn't work with Flash Lite (e.g. in Droid Incredible). So with Flash
    // Lite, we put it at (0, 0). This shows 1x1 box visible at left-top corner but this is
    // the best we can do as far as we know now.
    container.style.position = "absolute";
    if (isFlashLite()) {
        container.style.left = "0px";
        container.style.top = "0px";
    } else {
        container.style.left = "-100px";
        container.style.top = "-100px";
    }
    var holder = document.createElement("div");
    holder.id = "sound_flash_" + window.audio_count;
    container.appendChild(holder);
    document.body.appendChild(container);
    // See this article for hasPriority:
    // http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-7ffd.html
    swfobject.embedSWF(
        options.swf, holder.id,
        "1" /* width */, "1" /* height */, "9.0.0" /* SWF version */,  null, {},
        {
            quality: "high",
            allowScriptAccess: "always"
        }
        );    

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)