如何在没有焦点的情况下将输入传递到网站?

Posted

技术标签:

【中文标题】如何在没有焦点的情况下将输入传递到网站?【英文标题】:How could I pass input into a website without focus? 【发布时间】:2014-03-29 21:38:45 【问题描述】:

我正在考虑制作一个网站,该网站最终会在有人玩电子游戏时在后台(或第二个屏幕上)打开。即使浏览器当前没有聚焦,我如何将有界键输入传递给网站?我想避免使用 java applet,但如果这是唯一的方法,我可以这样做。浏览器插件也可以工作,但我们的想法是避免任何用户安装并使其尽可能简单。有什么想法吗?

【问题讨论】:

游戏是什么格式的?原生应用?你能描述一下吗? 理论上任何游戏,但可能原生安装的游戏是它使用最多的,所以浏览器根本没有焦点。 您是希望浏览器真正从游戏中窃取焦点,还是只是想要一种将数据获取到已经在浏览器中打开的页面上的方法? 我根本不想打断游戏,所以最好不要偷取焦点。就像你说的那样,只是一种将输入(例如绑定键)传递给已经在浏览器中打开的页面的方法。 【参考方案1】:

实现此目的的一种方法是使用WebSockets (basic usage example)。

websocket 将为您提供浏览器和服务器之间的消息传递通道。例如,您的游戏可以调用托管在您的服务器上的 REST 服务,该服务会触发一条消息通过您的用户浏览器所连接的 websocket 发送。

基本步骤可能是这样的:

用户1登录网页,websocket连接到服务器A。 用户 1 启动游戏 游戏向服务器 A 上的 REST 服务发送 http 请求以执行操作,比如<server_address>/move/east 服务器识别用户 1 的 websocket,并向下发送“向东移动”命令 用户 1 的浏览器获取 websocket 上的消息,并相应地更新页面

这不会专注于窃取您的游戏,但会为您提供一种在游戏和用户浏览器会话之间进行通信的相对简洁的方式。我认为其中最困难的部分可能是您使用什么标识符将用户的游戏会话绑定到用户的浏览器会话,但也许您已经有了某种登录机制可以做到这一点。

这不需要任何类型的插件或第 3 方扩展,因为如今大多数浏览器都很好地支持 websocket,但您必须编写一些服务器端代码。

【讨论】:

所以游戏应该已经存在了。就像用户在玩《战地风云 4》时按下了某个键,我们希望在我们的网站上发生一些特定的事情。 @Hershizer33 啊,所以触发器不是直接来自游戏本身?在这种情况下,如果您只是想每隔一段时间传递一次数据,或者帕特里克霍夫曼建议的 ajax,那么 websocket 位本身就可以工作。【参考方案2】:

我猜你只有在页面真正获得焦点时才需要该信息。

您可以附加 html 文档的 onactivate 事件,然后执行 AJAX 调用。根据输出设置div或其他内容; 使用 Web Sockets 在后台将内容从您的服务器发送到客户端。

您必须先将数据发送到服务器才能使其正常工作。

【讨论】:

如果浏览器根本没有焦点(全屏原生游戏像战地4一样打开),这会起作用吗? 在有人看到之前我不明白你为什么想要它。您可以在页面获得焦点后立即下载它。 是的,即使页面没有获得焦点,这也可以工作(取决于浏览器,移动浏览器通常不会保持非活动标签处于活动状态)。 @Hershizer33: 运气好吗?您需要更多帮助吗? 非常感谢您的跟进!实际上,这周我没有太多时间来处理这个小项目,因为工作变得非常繁重。我非常感谢您的帮助,并会在我尝试时更新此问题。

以上是关于如何在没有焦点的情况下将输入传递到网站?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不从当前活动选项卡中获取焦点的情况下将子窗口添加到 QMdiArea(设置为 TAB 模式)?

如何在没有新服务器请求的情况下将下载的图像从父路由传递到子路由

如何在不使用任何浏览器相关组件的情况下将数据发布到另一个网站?

如何在不丢失setfocus的情况下将光标设置到文本框的末尾?

如何在不使用角度的ng的情况下将输入值从父组件传递给子组件?

如何在不覆盖 TTY 的情况下将密码传递给 su/sudo/ssh?