我正在使用Chrome扩展程序Extension并使用本机消息传递来调用Ping.exe。由于我需要在运行时选择IP,我想有一个批处理文件可以提示用户输入IP。如果我直接点击批处理文件并得到适当的响应,它工作正常(我也得到用户提示)。但是当我尝试通过我创建的UI调用它时,使用本机消息传递它不会提示用户并直接使用默认IP集调用exe。我错了什么在这儿干?
提前致谢。
Jaideep
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
答案 0 :(得分:2)
这是因为您的UI创建的流程没有有效的标准输入或重定向的标准输入。
当交互式set
尝试扫描输入时,它会获得“文件结束”,并保留默认的先前设置值。
我可以为你提供一个更好的选择,因为它是图形化的:
1)创建一个.vbs脚本(与批处理文件位于同一目录中),提示输入地址并将其打印到stdout:
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
将出现一个VB窗口,提示您输入IP地址,并回显它,重定向到文件。把它放回你的id
环境中。变量,你完成了,根本没有使用标准输入。
答案 1 :(得分:1)
使用Native Messaging时,Chrome 是流程的输入(它会创建一个本机主机的实例,并将STDIN / STDOUT传送到Chrome进程)。
+-----------+ +-----------------+
| | | |
| | | STDIN |
| +-------------------> |
| Chrome | | Native |
| extension | | STDOUT host |
| <-------------------+ |
| | | |
+-----------+ +-----------------+
由于批处理文件的输入是通过STDIN完成的,因此在这种情况下您无法获得输入。如果您想要用户输入,则需要一个UI程序(也可以通过STDIO与Chrome进行通信)。