【问题标题】:Invoking a JS method exposed by Flex app from a secondary window从辅助窗口调用 Flex 应用程序公开的 JS 方法
【发布时间】:2020-02-25 16:15:23
【问题描述】:

我目前正在开发一个用 Flex(基本上是 Flash)制作的旧应用程序,它仍然需要在 IE11 中工作(我知道......我知道)。这个 webapp(我们称之为 A)公开了一个可从 JavaScript 调用的方法。 A 还有一个按钮可以打开一个新的浏览器窗口(称为 B)。 B在“beforeunload”事件上有一个监听器:当用户要关闭B时,B必须调用A中的JS方法。希望我解释得对。使用带有参数“--disable-web-security”的 Google Chrome 执行 A 中定义的方法,我们对此感到满意。我们使用以下指令:

window.opener.document.getElementById('flashAppID').methodName();

我们面临的问题是IE11在B试图执行A中的JS方法时抛出如下异常:

   {
      [functions]: ,
      __proto__: {
         [functions]: ,
         __proto__: {
            [functions]: ,
            __proto__: null
         },
         message: "",
         name: "Error"
      },
      description: "Authorization denied",
      message: "Authorization denied",
      name: "Error",
      number: -2146828218,
      stack: "Error: Authorization denied
   at callOpener (http://domainname.ext/pageB.html:18:21)"
   }

我们尝试禁用 IE 中任何可能的安全限制,但没有成功;有没有人建议如何避免这种异常?

提前致谢。

【问题讨论】:

  • 尝试对该站点使用 HTTPS 协议。如果它在其他域上,请尝试在 IE 选项、安全选项卡中启用“跨不同域导航窗口和框架”和“允许跨域数据源”选项。出于测试目的,降低 IE 的安全设置并保持所有安全区域的设置相似。然后再次尝试测试问题。
  • 感谢您的关注。两个页面都在同一个域中。正如我所写,我们已经尝试降低 IE 的所有可能的安全设置。我要问我们是否可以使用HTTPS。我会告诉你的。
  • 让我们知道您的测试结果。我们将努力提供进一步的建议。
  • 我一定会的。请注意,在没有 Flash 应用程序的页面中测试行为时,会执行 JS 方法。所以我们可以推断,当从辅助窗口调用该方法时,IE阻塞了JS和Flash之间的交互。
  • 如果您在组织中运行此代码,请询问您的 IT 部门是否应用了导致此问题的任何安全策略。如果可能的话,您还可以尝试在组织外部测试相同的问题以验证结果。它可以帮助缩小问题范围。

标签: javascript flash actionscript internet-explorer-11 window.opener


【解决方案1】:

问题是由以下作业引起的,以前的开发人员出于未知原因编写:

document.domain = "domainname.ext";

在评论该行之后,一切都开始按预期工作。所以如果有人遇到相同或类似的问题,请务必不要覆盖document.domain属性。

【讨论】:

  • 感谢您发布此问题的解决方案。我建议您尝试将自己的答案标记为该问题的可接受答案。它可以在未来帮助其他社区成员解决类似的问题。感谢您的理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-05
  • 2011-03-27
  • 1970-01-01
相关资源
最近更新 更多