【问题标题】:Close windows that were not opened by script using javascript [duplicate]使用javascript关闭脚本未打开的窗口[重复]
【发布时间】:2012-09-01 03:18:46
【问题描述】:

我希望我的 Web 应用程序在没有菜单栏、地址栏等的窗口中运行。我有一个 Default.html 页面,在此页面中我单击“运行应用程序”按钮,该按钮首先使用 @ 在另一个窗口中打开我的应用程序987654321@ 然后通过使用window.open_self 参数打开“AutoClose.html”来关闭当前窗口

默认.html

<html>
<head>
<script type="text/javascript">
    function runApp() {
        // Open my application
        window.open('Application.html', null, 'status:no;dialogHide:true;help:no;scroll:yes;center=yes;');

        // Close this window
        window.open('AutoClose.html', '_self');
    }
</script>
</head>
<body>
    <input type="button" value="Run Application" onclick="runApp();" />
</body>
</html>

AutoClose.html

<html>
<head>
<script type="text/javascript">
    window.close();
</script>
</head>
<body></body>
</html>

我的应用程序应该支持 IE、Firefox 和 Chrome,并且我的代码在 IE 和 Chrome 上运行良好,但由于“脚本可能无法关闭不是由脚本打开的窗口”警告,它无法关闭 Firefox 上的第一个窗口。在 Firefox 上,它会打开 AutoClose.html,但此页面中的 window.close() 调用只会导致“脚本可能无法关闭脚本未打开的窗口”警告并且窗口未关闭。顺便说一句,我的应用程序窗口打开时没有任何问题(没问题)。

似乎使用window.open()_self 参数技巧不适用于Firefox。因为我的目标是在没有菜单栏、地址栏等的窗口中运行应用程序。

  1. 有什么方法可以隐藏地址栏、菜单栏而不使用window.open()(至少对于Firefox)?然后我就不需要运行window.close()
  2. 是否有任何设置来抑制 Firefox 上的“脚本可能无法关闭不是由脚本打开的窗口”警告? “允许脚本关闭不是由脚本打开的窗口”设置会很棒(:
  3. 有什么方法可以让window.close() 在 Firefox 上用于“不是由脚本使用 javascript 打开的窗口”?
  4. 或者,还有其他建议吗(:

提前致谢。

更新:这是一个银行应用程序,我只是一个开发人员而不是决策者。换句话说,某种分析师希望应用程序以这种方式工作。我没有质疑它。因此,“您尝试做的整个事情都是完全错误的”答案不会真正有帮助。

【问题讨论】:

  • Afaik 你是 SOL - 但我也很难看到有任何需要。如果你成功了,我将永远不会再访问你的 DOS 站点
  • 个人建议,不要“在没有菜单栏、地址栏的窗口中运行”。这简直令人讨厌。这些栏很有用,我几乎看不出有什么充分的理由剥夺您的用户的功能。

标签: javascript firefox


【解决方案1】:

您无法在 Firefox 中关闭当前窗口,因为您没有打开它。将 AutoClose.html 加载到其中并不重要。

但是这整个与 windows 的业务是毫无意义的。大多数人都将浏览器设置为在新选项卡中打开新窗口,而您无法阻止选项卡窗口中的菜单栏等。

如果你仅仅因为我使用了你的应用程序而关闭了我的窗口,我个人会非常恼火。

它可能是用户打开的唯一窗口 - 在这种情况下,您只是关闭了他们的浏览器。可能是他们想反击,关闭标签会惹恼他们。

firefox 的这个错误是正确的,如果它在 Chrome 中运行,这是一个严重的错误,你应该报告它。

【讨论】:

  • 如上所述,我的目标是“在没有菜单栏、地址栏等的窗口中运行应用程序”。不关闭窗口。
  • 那么就打开一个新窗口,不理会当前窗口。有什么问题?
  • @MehmetAtaş 所以用其他东西替换登录表单 - 只需 display: none; 就可以了。
  • @MehmetAtaş 还有?那有什么问题?只需在其中放置一些占位符并忽略它。就我个人而言,我不认为你应该打开一个新窗口——用户觉得这很烦人。
  • @MehmetAtaş 随心所欲,但您无法关闭原始窗口,对此您无能为力 - 浏览器不会让您这样做。你必须弄清楚放在那里的东西。我建议忘记新窗口,但您不想这样做。美好的。但不要与不可能的事情作斗争。再一次,记住:大多数时候你尝试打开一个窗口是没有意义的,因为几乎所有的浏览器都只是把新窗口放在一个新标签中。让整个练习完全没有必要。
【解决方案2】:

简单地说,

open(location, '_self').close();

【讨论】:

  • 斯托克。很好的解决方案。
  • 这不会关闭窗口,它只会清除页面的内容。
  • 谢谢,这是一个实际的答案,应该是投票/接受最多的答案
  • 这不适用于 Firefox 72.0
【解决方案3】:

基本问题是您的需求制定者希望您做的事情被 Firefox 明确阻止:

  1. 无法在用户现有的浏览器窗口中隐藏 UI,因为它对用户不利,并且是网络钓鱼者最喜欢的工具。
  2. 无法通过脚本关闭用户的现有窗口,在此过程中会丢失所有用户的会话历史记录。

基本上,用户在浏览器中还有其他东西,而不仅仅是银行的东西。因此,假设其他情况或多或少注定要失败。

有什么办法可以推翻不合理的要求?

【讨论】:

  • 如果浏览器允许更多的信任级别自定义会更好。我希望用户能够对浏览器说“我信任这个网站,所以允许它使用 javascript 做任何事情”
  • 当然,任何理智的用户都不应该以这种方式信任典型的银行网站...特别是,如果用户信任上述网站,那么该网站将通过破坏用户的信任来滥用该信任。会话历史!
  • 既然是银行员工使用的内网 Web 应用程序,考虑到这种情况似乎太偏执了。
  • 如果它是一个 Intranet 应用程序并且你有一个固定的用户受众,你可以让他们都设置dom.allow_scripts_to_close_windows 首选项。但请注意,如果他们将此浏览器用于您的应用程序以外的任何内容,您破坏他们的会话历史记录。
【解决方案4】:

这对我有用。

当点击 jQuery UI 对话框中的按钮时,我用它来关闭窗口。

open(location, '_self').close();

【讨论】:

  • 投票为重复。
猜你喜欢
  • 1970-01-01
  • 2020-11-02
  • 2016-11-06
  • 2014-09-25
  • 2023-04-03
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多