我正在开发 Chrome 扩展 Extension并使用 native 消息传递来调用 Ping.exe。因为我需要在运行时选择 IP,所以我想有一个可以提示用户输入 IP 的批处理文件。它工作正常,如果我直接单击批处理文件并得到正确的响应(我也会得到用户提示)。但是当我尝试通过我创建的 UI 调用它时,使用 native 消息传递它不会提示用户并直接调用具有默认 IP 集的 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
尝试扫描输入时,它会到达“文件末尾”,并保留默认的、先前设置的值。
我可以向您推荐一个更好的选择,因为它是图形化的:
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
将出现一个 VB 窗口,提示您输入 IP 地址,并回应它,重定向到一个文件。把它放回你的 id
环境中。变量,你就完成了,根本不需要使用标准输入。
关于javascript - 使用 Chrome native 消息传递触发时批处理文件不提示用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40830788/