草庐IT

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

coder 2024-04-17 原文

当用户点击来自外部程序(非网络)的按钮时,我们打开了一个网页。问题是,当用户返回程序并打开另一个程序时,它会在同一个浏览器窗口中打开,但会在不同的选项卡中打开。几个小时后,我们不懂技术的客户打开了 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 - 从外部程序定位相同的浏览器选项卡的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  3. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  4. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  5. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  6. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  7. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  8. ruby - 如果指定键的值在数组中相同,如何合并哈希 - 2

    我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat

  9. ruby - 在 Ruby 中用键盘诅咒数组浏览 - 2

    我正在尝试在Ruby中制作一个cli应用程序,它接受一个给定的数组,然后将其显示为一个列表,我可以使用箭头键浏览它。我觉得我已经在Ruby中看到一个库已经这样做了,但我记不起它的名字了。我正在尝试对soundcloud2000中的代码进行逆向工程做类似的事情,但他的代码与SoundcloudAPI的使用紧密耦合。我知道cursesgem,我正在考虑更抽象的东西。广告有没有人见过可以做到这一点的库或一些概念证明的Ruby代码可以做到这一点? 最佳答案 我不知道这是否是您正在寻找的,但也许您可以使用我的想法。由于我没有关于您要完成的工作

  10. ruby-on-rails - 浏览 Ruby 源代码 - 2

    我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru

随机推荐