代码之家  ›  专栏  ›  技术社区  ›  Peter Ruderman

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

  •  2
  • Peter Ruderman  · 技术社区  · 15 年前

    我们不幸地遇到了不得不在我们的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 回复  |  直到 5 年前
        1
  •  2
  •   Joeri Sebrechts    15 年前

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

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

        2
  •  2
  •   TJ L    15 年前

    很难百分之百地确定问题是什么,但如果我猜的话,我会说这可能与客户有关IT部门使用某些安全策略、代理和类似的东西锁定他们的机器。您是否与遇到此问题的客户IT部门讨论过这些问题?

    您是否连接到远程页面的端口与宿主IE控件中的:80不同?我对IE COM不太了解,但它是否可能通过编程获得错误、警告和类似性质的东西?