我有一个简单的页面,上面嵌有一个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
文件是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);
}
}
有谁知道为什么会这样?
答案 0 :(得分:2)
立即引起我注意的两件事:
第一: 您将匿名函数(包含SWFObject代码)包装在jQuery“dollar”声明中。 jQuery美元函数“接受一个包含CSS选择器的字符串,然后用于匹配一组元素。”
您的函数不返回任何内容,因此当jQuery尝试将空引用用作CSS选择器时,它将导致JavaScript错误。 swfobject.embedSWF
也没有返回值,因此最好从代码中删除jQuery美元函数。
如果您只是希望您的代码在匿名函数中运行,请删除$
并在结尾添加函数调用:
(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尚未正式支持它。但是,我们预计不会出现任何问题。我建议您尝试上面提到的编辑,看看它是否能解决您的问题。
答案 1 :(得分:0)
我不知道为什么会发生这种情况,但您可以尝试使用try / catch修复它
try{obj[i] = null;}catch(e){}
这应该避免错误消息。