javascript - IE 在重新加载嵌入了 swfobject 的页面时抛出 'Unspecified error'

标签 javascript html internet-explorer swfobject


我有一个简单的页面,上面嵌入了一个 swfobject。
看起来 IE 对嵌入对象的“过滤器”属性有问题。
我的测试页面是这样的:

<!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 文件是来自 download page 的一个 swfobject 包.

现在,当我重新加载页面时,它会在 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);
        }
    }

有谁知道为什么会发生这种情况?

最佳答案

有两件事立即引起了我的注意:

首先: 您将匿名函数(包含 SWFObject 代码)包装在 jQuery 的“dollar”声明中。 jQuery 美元函数“接受一个包含 CSS 选择器的字符串,然后用于匹配一组元素。”

您的函数不返回任何内容,因此当 jQuery 尝试使用空引用作为 CSS 选择器时,它将导致 JavaScript 错误。 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 不会还没正式支持呢。但是,我们预计不会出现任何问题。我建议尝试我上面提到的修改,看看它是否可以解决您的问题。

关于javascript - IE 在重新加载嵌入了 swfobject 的页面时抛出 'Unspecified error',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4177481/

相关文章:

javascript - React 似乎在浏览器中渲染之前转义了 HTML,导致它在页面中显示为代码

javascript - 建立关联时,哪些方法/mixin sequelize 添加到模型中?

javascript - 无法使标题可编辑

javascript - Ng-Repeat 不重复(或返回任何内容)

IE6中的CSS位置问题

javascript - 为什么 keydown 监听器在 IE 中不起作用

javascript - 让 IE 不再因不支持的 Javascript 而挂起?

javascript - jQuery/javascript 包装代码查询

javascript - jQuery - 显示div的出现次数

html - CSS 动画循环淡入淡出 1-2-3-1-2-3-1-2