使用 chrome 本机消息触发时批处理文件不提示用户输入

Batch file not prompting for user input when triggered using chrome native messaging

我正在开发 Chrome 扩展 Extension 并使用本地消息传递来调用 Ping.exe。因为我需要在运行时选择 IP,所以我想有一个批处理文件可以提示用户输入 IP's.It 工作正常,如果我直接单击批处理文件并得到正确的响应(我也得到用户提示)。但是当我尝试通过我创建的 UI 调用它时,使用本机消息传递它不会提示用户并直接使用默认 IP set.What 调用 exe,我错了在这里做什么?

提前致谢。

贾迪普

batch File -

@echo off
set id= 192.168.1.1
set /p id= Enter IP:
set Pathname="C:\Windows\System32"
cd /d %Pathname%
start call PING.exe %id%
PAUSE

JS -

document.getElementById('but1').addEventListener(
      'click', connect);

function connect() {
 
  var hostName = "com.google.chrome.example.echo"; 
  port = chrome.runtime.connectNative(hostName);
  port.onMessage.addListener(onNativeMessage);
  port.onDisconnect.addListener(onDisconnected);
}
}

Manifest -- 

{
  "name": "com.google.chrome.example.echo",
  "description": "My Application",
  "path": "C:\Extension\ping.bat",
  "type": "stdio",
  "allowed_origins": [
    "chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/"
  ]
}

]3

那是因为您的 UI 创建的进程没有有效的标准输入或重定向的标准输入。

当交互式 set 尝试扫描输入时,它得到 "end of file",并保持默认值,之前设置的值。

我可以向您推荐一个更好的选择,因为它是图形化的:

1) 创建一个 .vbs 脚本(在与批处理文件相同的目录中)提示输入地址并将其打印到标准输出:

SET FS = CreateObject("Scripting.FileSystemObject")
SET StdOut = FS.GetStandardStream(1)
StdOut.Write(InputBox("IP Address"))

2) 在您的批处理脚本中执行此操作:

cscript /nologo %~pd0\ipprompt.vbs > %TEMP%\ipaddr.txt
set /p id=<%TEMP%\ipaddr.txt

A VB window 将出现提示您输入 IP 地址,并回应它,重定向到一个文件。把它放回你的 id 环境中。变量,你就完成了,根本不需要使用标准输入。

当使用本机消息时,Chrome 进程的输入(它创建一个本机主机的实例,STDIN/STDOUT 通过管道传输到 Chrome进程)。

 +-----------+        +-----------------+
 |           |        |                 |
 |           |        | STDIN           |
 |        +------------------->         |
 | Chrome    |        |         Native  |
 | extension |        | STDOUT   host   |
 |        <-------------------+         |
 |           |        |                 |
 +-----------+        +-----------------+

由于批处理文件的输入是通过STDIN 完成的,在这种情况下您无法获得键入的输入。如果你想要用户输入,你需要一个 UI 程序(它也通过 STDIO 与 Chrome 通信)。