【问题标题】:Why won't a Javascript control load in hosted web browser?为什么在托管 Web 浏览器中无法加载 Javascript 控件?
【发布时间】: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


    【解决方案1】:

    您可能想要实现自己的安全管理器:

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

    【讨论】:

    • 这看起来确实很有希望。我会让你知道结果如何。
    • 好吧,我已经在我们的控制站点上实现了 ISecurityManager 接口,但仍然没有乐趣。这确实解决了 Internet Explorer 安全设置过于苛刻的问题,这对我们很有用。它肯定会消除支持电话,所以谢谢你。不幸的是,我们的古怪客户仍然遇到问题,我想这一定是相同的症状,但原因不同。无论如何,我会坚持下去。再次感谢。
    • 问题原来是一个简单的本地化问题,但这确实是一个有用的答案,所以我将其标记为接受。
    • 具有讽刺意味的是,我自己并没有真正实现它。我想我得为此留出一些时间......
    【解决方案2】:

    很难 100% 确定问题出在哪里,但如果我猜测的话,我会说这可能与客户 IT 部门使用某些安全策略、代理等类似性质的东西锁定他们的机器有关。您是否与遇到此问题的客户 IT 部门讨论过这些问题?

    您是否连接到与托管 IE 控件中的 :80 不同的端口上的远程页面?我对 IE COM 了解不多,但是否有可能以编程方式获取错误、警告和类似性质的东西?

    【讨论】:

    • 是的,但它们没有帮助。我觉得特别奇怪的是,Internet Explorer 可以很好地显示本地页面,但托管的 Internet Explorer 控件不能(但只能在他们的机器上)。
    猜你喜欢
    • 2017-02-27
    • 2013-05-08
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    相关资源
    最近更新 更多