【发布时间】:2010-11-03 17:32:24
【问题描述】:
不幸的是,我们不得不在我们的 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 中的安全设置解决了这个问题。但是现在我们有一些客户的安全设置似乎正确,但我们仍然遇到问题。
另外一个问题是,如果我像上面那样创建一个网页并让客户在他的机器上打开它,他会看到一个弹出栏,要求他授权活动内容,然后一旦他同意,一切都会正常运行。 (在此页面中,我已将 OurApp.OnLoad() 调用替换为一些执行相同操作的 JavaScript。)这与我在我的机器上遇到的行为相同,但我们的应用程序在这里运行良好。我们在客户的机器上根本没有收到任何错误消息(尽管也许我们只是没有在正确的地方寻找)。
所以,我被难住了。任何想法或建议将不胜感激。
更新 我们终于设法解决了这个问题。问题是我们将不受支持的语言环境传递给第三方网站。在这种情况下,它们以空脚本的形式返回,而不是紧密匹配或合理的默认值。
【问题讨论】:
标签: javascript internet-explorer winapi com