在IE8中从OBJECT标签调用.Net程序集

6

我有一个网页调用了一个.NET程序集。在Windows XP和IE7中一切工作正常。相关部分如下:

<html>
<head>
    <script language="javascript" type="text/javascript">
    function doScript() {
        myControl1.Go("value1","value2");
    }
    </script>
</head>
<body onload="javascript:doScript();">
    <object id="myControl1" name="myControl1" 
            codebase="../cabs/myassembly.dll" 
            classid="../cabs/myassembly.dll#MyNs.MyClass" 
            width="1" height="1"></object>
</body>
</html>

我在Windows 7上使用IE8无法使其正常运行,以下是一些注意事项:
  • 程序集已经签名。
  • 我目前将其放在localhost上进行托管。
    • 在能够正常工作的机器上(VirtualBox上的WinXP,IE7),它正在使用指向本地机器的IP地址(http://1.2.3.4/...),该IP位于IE的“受信任站点”中。
    • 在不能正常工作的机器上(Windows 7, IE8),它使用的是http://localhost/...localhost也在IE的“受信任站点”中。
  • 程序集从http://localhost/cabs/myassembly.dll加载。
  • 错误信息是一个javascript错误,“对象不支持此属性或方法”。
  • Fiddler显示在请求文件时有200 OK响应,但似乎dll并没有被传输到临时Internet文件位置。
  • 该站点正在“IE 7兼容性”模式下运行。
  • 我将所有IE权限降至最不安全状态,并尝试了各种方式,但结果都是一样的。

请问有人有什么想法可以帮助我解决这个问题,或者确定问题所在?

免责声明:我知道现在是2012年了,世界已经摆脱了IE7、IE8、ActiveX等等,但是我们的技术还有些滞后。这就是我需要解决的问题,升级到现代解决方案并不是一个选项。

更新:我在运行IE8的Windows XP VirtualBox中使其正常工作了。所以看来问题是特定于Windows 7的。它在我的本地机器和运行Windows 7, IE8的VirtualBox上都无法工作。


你尝试过使用IE8的兼容模式吗?如果可以的话,只需将兼容模式的<meta>添加到页面中,以强制浏览器进入兼容模式。 - Dai
@David,是的,该站点正在兼容模式下运行。 - Dave Mateer
不确定你是否已经遇到了这个知识库 http://support.microsoft.com/kb/311301/en-us?fr=1 - rene
1
或者这个 http://blogs.msdn.com/b/askie/archive/2009/05/22/net-control-no-longer-loads-in-ie8-in-internet-zone.aspx - rene
你尝试过在路径中去掉 ".." 引用吗?IEHost dll 是否注入了 IE 进程?你的 DLL 是否被注入到 IE 进程中?32 位和 64 位问题呢? - Simon Mourier
显示剩余7条评论
3个回答

5

是的,出于安全原因,他们默认禁用了 .net 2.0 和 4.0 运行时。请注意,根据链接的解决方案,在 64 位机器上可能需要使用 Wow6432Node 键。 - Rory

1

我不确定这是否有帮助,但我曾经遇到过类似的问题,通常采用以下步骤可以解决。请在出现问题的计算机上尝试以下步骤:

  1. 将包含dll文件的URL域名分配给受信任的站点区域。
  2. 打开Internet选项中的安全选项卡,然后单击受信任的站点
  3. 单击默认级别,确保选择了中等。如果没有,请手动设置为中等
  4. 应用更改。

为了保险起见,请关闭所有IE窗口,然后重新启动并测试是否正常工作。

关键问题是在Rene在他的第二条评论中链接到的页面上讨论过的。从IE8开始,存在一个安全设置,它没有在自定义级别选项列表中有自己的UI界面。影响它的唯一方法是通过设置级别-将其设置为启用中等或更低级别,而将其设置为禁用中高或更高级别。

现在这很可能不是你的问题,因为通常受信任站点的默认级别为中等,这将启用该设置。但至少值得尝试(也许你有一些组策略或其他东西已经改变了受信任站点的默认级别)。


不幸的是,我已经走过这条路,但没有任何改变。这就是为什么我感到困惑 - 它应该像你说的那样工作,但似乎有其他东西在干扰。 - Dave Mateer

0

不要使用.dll文件,而是使用.cab文件。


你是指带有CLSID等标准的ActiveX控件吗?这肯定会使实现变得复杂,可能还会影响部署和维护。虽然这可能是一种解决方法,但我宁愿解决这个问题。就我所知,DLL应该可以工作;只是我不确定还有什么其他测试可以确定问题。 - Dave Mateer
是的,我试过。顺便说一下,即使使用cab文件,我的ActiveX也无法完全按预期工作(我必须首先以管理员身份运行IE,安装cab,退出IE,再次打开IE才能使用该ActiveX)。 - Quannt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接