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

时间:2016-11-27 15:50:34

标签: javascript batch-file google-chrome-extension manifest command-prompt

我正在使用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

2 个答案:

答案 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进行通信)。