0

我有以下 javascript 代码(在底部),我从他们发布的网站为客户的每个 api 调用注入这些代码。

客户端在其网页中进行脚本标记调用,例如:

<div id="myDivID"/>
<script type="text/javascript" src="http//:srv.ab.com/api/getswf?divIdToReplace=myDivID"></script>

一旦执行了以下代码,就会从 api 调用中注入以下代码,并将 div 替换为 swf:

<script type="text/javascript">

        (function () {

            var object = document.createElement('object');
            object.setAttribute('width', '300');
            object.setAttribute('height', '250');
            object.setAttribute('classid', 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000');

            var param1 = document.createElement('param');
            param1.setAttribute('name', 'movie');
            param1.setAttribute('value', 'http://srv.ab.com/test.swf');

            var embed = document.createElement('embed');
            embed.setAttribute('src', 'http://srv.ab.com/test.swf');
            embed.setAttribute('width', '300');
            embed.setAttribute('height', '250');

            var param2 = document.createElement('param');
            param2.setAttribute('name', 'wmode');
            param2.setAttribute('value', 'transparent');

            object.appendChild(param1);
            object.appendChild(embed); // <-- Invalid argument for IE9!!!
            object.appendChild(param2);

            var container = document.getElementById('myDivID');
            while (container.firstChild) { container.removeChild(container.firstChild); }
            container.appendChild(object);
        })();

</script>

但是,swf 在 IE9 中不显示,但在 Chrome 和 FF 中呈现良好。

需要注意的一件事是 IE9 的无效参数错误仅在我得到的控制台中,如下面的脚本中调用的那样。

我在这里想念什么?我不能使用 jquery/swfobject,因为它必须是我注入客户端页面的纯 JavaScript。

4

1 回答 1

0

原来 IE 将某些 Intranet/Internet 站点设置为 Quirks 模式。这会导致 IE9 使用 IE6 javascript 行为和 IE7 DOM 操作。

在标头中添加以下元数据可以缓解这种情况:

<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
</head>

但是,从 api 交付解决方案中,可以在响应中设置 X-UA-Compatible 标头,其值为 IE=edge。

于 2012-10-23T23:36:40.840 回答