javascript - 从外部程序定位相同的浏览器选项卡

标签 javascript php jquery ibm-midrange

当用户点击来自外部程序(非网络)的按钮时,我们打开了一个网页。问题是,当用户返回程序并打开另一个程序时,它会在同一个浏览器窗口中打开,但会在不同的选项卡中打开。几个小时后,我们不懂技术的客户打开了 30 多个标签页,这确实降低了他们的计算机速度。

我们在外部程序中使用的语言是 RPG (IBM iSeries)。我们还没有找到一种方法来定位来自 RPG 的相同选项卡。用户正坐在一个名为 5250 的专用 telnet session 中,服务器程序 (RPG) 可以在该 session 中调用连接的 PC 上的 exe。它还可以调用 URL,这将使用客户端的默认 Web 浏览器。执行此操作时,您可以指定的唯一实际参数是 URL 本身,因此我们认为解决方案需要完全在浏览器中。我们可以编写一个 exe 来调用浏览器,但这会破坏将这些迁移到 Web 应用程序的目的。

有没有办法用 HTML/JavaScript/PHP/等实现这个?我们尝试让外部程序调用重定向脚本 (JavaScript),该脚本将定位浏览器选项卡,然后自行关闭。如果浏览器对安全性不那么挑剔,这将是一个很好的解决方案。

Firefox:有一个你必须设置的特殊设置,以便 JavaScript 可以关闭选项卡 IE:在用户选择“允许来自该域的弹出窗口”之前不会打开弹出窗口。但是在用户开始执行此操作之前,原始选项卡会自行关闭。 Chrome:Chrome 会终止对命名选项卡的引用。因此,无论如何,每个新弹出窗口都会在新选项卡中打开(即使它们调用相同的目标名称)。

我们在这方面一直很有创意,但还没有找到可靠的解决方案。这是一个 Intranet 项目,但由于这些公司的 PC 数量巨大,我们希望避免在每台计算机上安装或设置东西。

简而言之,主要问题是第二个 RPG 打开了一个新窗口,该新窗口没有任何对之前打开的命名选项卡的引用。

最佳答案

我在这里想的有点开箱即用,主要是因为我不知道你们的程序是如何工作的。首先,实际上没有办法关闭 X 选项卡,其中 x 是您想要的选项卡。唯一的方法是实际进入该选项卡/页面以将其关闭。那是用 PHP、HTML、JS 等。我假设你可以用一些 C++/C# 或任何在你的“客户端”而不是浏览器上运行的东西来实现它。

现在,开箱即用的可能解决方案是进行一些 session 管理和 ajax 调用。我的建议是在新选项卡上创建一个新 session 。用户得到一个新选项卡,你给它编号 1。每 x 秒你对脚本执行一次 ajax 调用,它只是检查它是什么“选项卡”。让我举个例子。

用户打开一个新标签, session 开始,你有一个包含以下内容的数组:

$_SESSION['tabs'][1] = 'set';

现在这个选项卡不断地调用一个文件,看看它是否应该保持“活跃”。基本上你用“嗨,我是标签 1”发帖。当您检查 session 时,选项卡 1 应该是那里唯一的 1。

在新选项卡上, session 选项卡获得另一个名为“2”的值,该值已设置。现在,当Tab 1向Ajax调用者帖子时,它应该给它回馈可以关闭的消息。当它收到该消息时,它应该调用一些 JS,例如:

javascript:window.open('','_self').close();

这只是大声思考,我想基本的想法应该可行,但我从未测试过它,也无法为您提供完整的代码示例。也许当我有空的时候,我可以尝试创建这个。

关于javascript - 从外部程序定位相同的浏览器选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22231509/

相关文章:

javascript - Jquery show() 不会等到完成

javascript - JSF - 通过 jquery 更新的表未反射(reflect)在服务器端的页面提交上

JavaScript AngularJS 在 HTML 中调用函数

javascript - IE11 在基于 Kendo/JavaScript 的 Web 应用程序中崩溃

javascript - Android chrome pageY 值是否随着最新的 chrome 更新而改变?

php - 使用单个查询在 SQL 中选择组和子组以及子组组

javascript - 如何返回所有现有数组?这可能吗?

javascript - 如何使用 getByDataFilter Sheets API v4 获取特定行数据

PHP:标记系统 JOIN 语句

javascript - 连续点击事件