为什么Javascript控件不会在托管Web浏览器中加载?

时间:2009-06-17 16:07:51

标签: javascript internet-explorer winapi com

我们处于不幸的位置,不得不在我们的Windows桌面应用程序中使用用于网页的JavaScript控件。为此,我们在应用程序中托管Internet Explorer并告诉它导航到本地网页。然后,我们获取脚本引擎的IDispatch接口,并使用它与控件进行交互。网页看起来像这样:

<html>
  <head>
    <script src="third party website url" type="text/javascript"></script>
  </head>
  <body onload="OurApp.OnLoad()">
  </body>
</html>

(为了清楚起见,我省略了一些标签和属性。)我们将“OurApp”对象添加到脚本引擎的命名空间中。它是一个IDispatch接口,允许脚本回调到我们的应用程序。在我们的应用程序的OnLoad()方法中,我们构造了由控件定义的各种JavaScript对象。

问题: 在99%的情况下,这种设置非常有效。不幸的是,在某些客户机器上,我们的OnLoad()方法无法在脚本引擎中找到任何预期的方法。这就像来自第三方网站的JavaScript要么没有加载,要么不被允许运行。对于许多客户,我们通过更改Internet Explorer中的安全设置来解决此问题。但现在我们有一些客户的安全设置似乎是正确的,但我们仍然遇到问题。

作为一个额外的皱纹,如果我创建一个如上所述的网页并让客户在他的机器上打开它,他会得到一个弹出栏,要求他授权活动内容,一旦他同意,一切正常。 (在这个页面中,我用一些执行相同操作的JavaScript替换了OurApp.OnLoad()调用。)这与我在我的机器上获得的行为相同,但我们的应用程序在这里工作正常。我们在客户的机器上根本没有收到任何错误消息(尽管我们可能只是在正确的位置找工作)。

所以,我很难过。任何想法或建议都会受到高度赞赏。

更新 我们终于设法解决了这个问题。问题是我们将不受支持的区域设置传递给第三方网站。在这种情况下,它们作为空脚本而不是紧密匹配或合理的默认值返回。

2 个答案:

答案 0 :(得分:2)

很难100%确定问题是什么,但如果我猜测我会说它可能与客户IT部门用某些安全策略,代理,这种性质的东西锁定他们的机器。您是否与遇到此问题的客户IT部门讨论过这些问题?

您是否在托管IE控件中的其他端口上连接到远程页面:80?我不太了解IE COM,但有可能以编程方式获得错误,警告,那种性质的东西吗?

答案 1 :(得分:2)

您可能希望实现自己的安全管理器:

http://msdn.microsoft.com/en-us/library/ms537182(VS.85).aspx