收到本机消息,但响应失败
Native Message received, but response failed
我正在开发一个 macOS 应用程序,它可以通过 native messaging
.
与 google chrome 扩展进行通信
我使用了google来自here的官方文档,所以我从扩展程序中成功接收了数据(如下所示)。
但是当我试图回答时,我总是得到一个错误。
我的回复是 JSON 格式,它是:
{
"text":
"Client Started"
}
我将 swift
用于我的 viewController
并使用 Objective-c++
进行本地消息传递:
ViewController.swift:
let stream = StreamReader()
override func viewDidLoad() {
super.viewDidLoad()
stream.getStream()
stream.writeStream("{\"text\":\"Client Started\"}")
}
StreamReader.m:
- (void)WriteStream:(NSString *)JSONResponse {
NSString *JSONResponseArray = [NSString stringWithFormat:@"%@", JSONResponse];
std::string outMsg = [JSONResponseArray UTF8String];
unsigned int len = outMsg.length();
std::cout.write(reinterpret_cast<const char *>(&len), 4);
std::cout << outMsg.data() << std::flush;
}
错误:
注意:我尝试更改响应及其长度,但两种情况下的错误都是一样的。
您应该将字符串的长度信息输出到标准输出:
unsigned int len = outMsg.length();
std::cout<< char(len & 0xFF)
<< char(((len >> 8) & 0xFF))
<< char(((len >> 16) & 0xFF))
<< char(((len >> 24) & 0xFF));
现在您可以将字符串数据写入标准输出了。
然后使用 std::flush 立即刷新数据,即将数据从我们的本机消息传递主机发送到目标扩展。我注意到,如果我们不这样做,那么这些数据将不会立即发送到目的地。
std::cout << outMsg.data() << std::flush;
我正在开发一个 macOS 应用程序,它可以通过 native messaging
.
我使用了google来自here的官方文档,所以我从扩展程序中成功接收了数据(如下所示)。
但是当我试图回答时,我总是得到一个错误。 我的回复是 JSON 格式,它是:
{
"text":
"Client Started"
}
我将 swift
用于我的 viewController
并使用 Objective-c++
进行本地消息传递:
ViewController.swift:
let stream = StreamReader()
override func viewDidLoad() {
super.viewDidLoad()
stream.getStream()
stream.writeStream("{\"text\":\"Client Started\"}")
}
StreamReader.m:
- (void)WriteStream:(NSString *)JSONResponse {
NSString *JSONResponseArray = [NSString stringWithFormat:@"%@", JSONResponse];
std::string outMsg = [JSONResponseArray UTF8String];
unsigned int len = outMsg.length();
std::cout.write(reinterpret_cast<const char *>(&len), 4);
std::cout << outMsg.data() << std::flush;
}
错误:
注意:我尝试更改响应及其长度,但两种情况下的错误都是一样的。
您应该将字符串的长度信息输出到标准输出:
unsigned int len = outMsg.length();
std::cout<< char(len & 0xFF)
<< char(((len >> 8) & 0xFF))
<< char(((len >> 16) & 0xFF))
<< char(((len >> 24) & 0xFF));
现在您可以将字符串数据写入标准输出了。
然后使用 std::flush 立即刷新数据,即将数据从我们的本机消息传递主机发送到目标扩展。我注意到,如果我们不这样做,那么这些数据将不会立即发送到目的地。
std::cout << outMsg.data() << std::flush;