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

Javascript 使用chrome本机消息触发时,批处理文件不提示用户输入,javascript,batch-file,google-chrome-extension,manifest,command-prompt,Javascript,Batch File,Google Chrome Extension,Manifest,Command Prompt,我正在使用Chrome扩展,并使用本机消息来调用Ping.exe。因为我需要在运行时选择IP,所以我想用一个批处理文件来提示用户输入IP。如果我直接单击批处理文件并得到正确的响应(也会得到用户提示),它工作得很好。但是当我试图通过我创建的UI调用它时,使用本机消息传递,它不会提示用户并使用默认IP集直接调用exe。我在这里做什么 提前谢谢 贾迪普 批处理文件- @回音 集合id=192.168.1.1 设置/p id=输入IP: set Pathname=“C:\Windows\System3

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

提前谢谢

贾迪普

批处理文件- @回音 集合id=192.168.1.1 设置/p id=输入IP: set Pathname=“C:\Windows\System32” cd/d%Pathname% 开始调用PING.exe%id% 暂停 JS- document.getElementById('but1')。addEventListener( “单击”,连接); 函数连接(){ var hostName=“com.google.chrome.example.echo”; port=chrome.runtime.connectNative(主机名); port.onMessage.addListener(onNativeMessage); 端口.onDisconnect.addListener(onDisconnected); } } 舱单-- { “名称”:“com.google.chrome.example.echo”, “说明”:“我的申请”, “路径”:“C:\\Extension\\ping.bat”, “类型”:“stdio”, “允许的来源”:[ “铬-extension://knldjmfmopnpolahpmmgbagdohdnhkik/" ]
}这是因为用户界面创建的流程没有有效的标准输入或重定向的标准输入

当interactive
set
尝试扫描输入时,它会获得“文件结束”,并保留先前设置的默认值

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

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
cscript/nologo%~pd0\ipprompt.vbs>%TEMP%\ipaddr.txt

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

+------------++-----------------+
|           |        |                 |
|| | STDIN|
|        +------------------->         |
|天然铬|
|扩展| |标准输出主机|

|感谢Xan和Jean-François Fabre提供了正确的理由。你能不能建议一个更好的解决方案,或者任何有解决方案的链接?再次感谢。我终于想出了一个可能适用于你的案例的聪明而简单的解决方案。对我来说非常有效。非常感谢让·弗朗索瓦·法布:)