IE выдает «неопределенную ошибку» при перезагрузке страницы со встроенным swfobject - PullRequest
1 голос
/ 14 ноября 2010


У меня есть простая страница со встроенным swfobject.
Похоже, у IE есть проблемы со свойством 'filters' во встроенном объекте.
Моя тестовая страница выглядит так:

<!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>
    <title>test</title>
    <script type="text/javascript" src="../scripts/swfobject.js"></script>
    <script type="text/javascript" src="../scripts/jquery-1.3.2.min.js"></script>
    <script type="text/javascript">
        var url = "";
        $(function()
        {
            var flashvars = {};
            var parameters = {};
            var attributes = {};
            flashvars["data-file"] = url;
            parameters.wmode = "transparent";       
            swfobject.embedSWF("test.swf", "graph1", "100%", "100%", "9.0.0", "expressInstall.swf", flashvars, parameters, attributes);
        });
    </script>
    <style type="text/css">
        #graph1
        {
            margin:30px;
            height: 400px;
            width: 600px;
        }
    </style>
</head>
<body>
    <div id="graph1"></div>
</body>
</html>  

примечание: файл test.swf является одним пакетом swfobject со страницы загрузки .

Теперь, когда я перезагружаю страницу, она выдает «Unspecified error» в IE, но не в Firefox, в котором свойство filters равно undefined.

код, который, по-видимому, вызывает ошибку, находится в swfobject.js v2.2 (строки 494-504):

/*! SWFObject v2.2 <http://code.google.com/p/swfobject/> 
    is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> 
*/


function removeObjectInIE(id) {
        var obj = getElementById(id);
        if (obj) {
            for (var i in obj) {
                if (typeof obj[i] == "function") {
                    obj[i] = null; // when (i == 'filters') we get the error
                }
            }
            obj.parentNode.removeChild(obj);
        }
    }

Кто-нибудь знает, почему это может происходить?

Ответы [ 2 ]

2 голосов
/ 14 ноября 2010

Две вещи, которые сразу бросились в глаза:

Во-первых: Вы обернули свою анонимную функцию (содержащую код SWFObject) в jQuery-декларацию доллара. Функция jQuery dollar "принимает строку, содержащую селектор CSS, который затем используется для сопоставления с набором элементов."

Ваша функция ничего не возвращает, поэтому она вызовет ошибку JavaScript, когда jQuery попытается использовать нулевую ссылку в качестве селектора CSS. swfobject.embedSWF также не возвращает значение, поэтому, вероятно, было бы лучше удалить функцию jQuery dollar из вашего кода.

Если вы просто хотите, чтобы ваш код выполнялся в анонимной функции, удалите $ и добавьте вызов функции в конце:

(function()
    {
        var flashvars = {};
        var parameters = {};
        var attributes = {};
        flashvars["data-file"] = url;
        parameters.wmode = "transparent";       
        swfobject.embedSWF("test.swf", "graph1", "100%", "100%", "9.0.0", "expressInstall.swf", flashvars, parameters, attributes);
})();

Второе: Вы передаете имя переменной FlashVars, которая содержит дефис, что недопустимо как в JavaScript, так и в ActionScript.

Наконец, removeObjectInIE (подфункция swfobject.removeSWF) была тщательно протестирована в IE 6, 7 и 8. Поскольку IE9 все еще находится в бета-версии, swfobject официально пока не поддерживает его. Тем не менее, мы не ожидаем каких-либо проблем. Я предлагаю попробовать правки, о которых я упоминал выше, и посмотреть, не прояснит ли это вашу проблему.

0 голосов
/ 14 ноября 2010

Понятия не имею, почему это происходит, но вы можете попытаться исправить это с помощью try / catch

try{obj[i] = null;}catch(e){}

Это должно избежать сообщений об ошибках.

...